【问题标题】:Python: check if last value of list occurs more than oncePython:检查列表的最后一个值是否多次出现
【发布时间】:2018-04-26 16:39:18
【问题描述】:

问题:

编写一个程序,它会在列表中搜索以查看列表中的最后一个值是否出现 不止一次。如果最后一个值出现不止一次,则返回 true。否则,返回假。如果列表是 为空,返回 false。

我的代码:

def go(list1):
for i in range(0,len(list1)):
    if list1[i] is list1[-1:]:
        return True
else:
    return False

print ( go( [-99,1,2,3,4,5,6,7,8,9,10,5] ) )
print ( go( [10,9,8,7,6,5,4,3,2,1,9] ) )
print ( go( [10,20,30,40,50,-11818,40,30,20,10] ) )
print ( go( [32767] ) )
print ( go( [7,7,7,7] ) )
print ( go( [9,10,-88,100,-555,1000] ) )
print ( go( [10,10,10,11,456,10,10] ) )
print ( go( [-111,1,2,3,9,11,20,30] ) )
print ( go( [9,8,7,6,5,4,3,2,0,-2,9,9] ) )
print ( go( [12,15,18,21,23,1000] ) )
print ( go( [250,19,17,15,13,11,10,9,6,3,2,1,250] ) )
print ( go( [] ) )

我的输出:

False
False
False
False
False
False
False
False
False
False
False
False

期望的输出:

True
True
True
False
True
False
True
False
True
False
True
False

我做错了什么?为什么我的所有输出都为 False?

【问题讨论】:

  • 使用== 代替is 来检查是否相等
  • 请不要在 cmets 中回答。如果您有问题的答案,请将其作为答案发布。
  • 顺便说一句,go 是该函数的 可怕 名称。

标签: python list


【解决方案1】:

你不应该在这里使用is,因为is不检查的相等性,而是引用的相等性。

相反,您可以使用arr[-1] in arr[:-1] 查看列表的最终值是否存在于列表中的其他任何位置。

x = [-99,1,2,3,4,5,6,7,8,9,10,5] 

def is_last_contained(arr):
  return arr[-1] in arr[:-1]

print(is_last_contained(x))

输出:

True

【讨论】:

    【解决方案2】:

    您的代码中有几个错误:

    1. range(0,len(list1)) 应该是 range(0,len(list1)-1),因为您不想将最后一个元素与其自身进行比较。
    2. list1[-1:] 应该是 list1[-1]。前者选择一个切片,后者选择单个元素。

    话虽如此,@chrisz 的解决方案更加 Pythonic 和简洁 :)

    【讨论】:

      【解决方案3】:

      您的错误是您试图将一个元素与一个列表片段进行比较。另一个错误是您使用关键字is 而不是==。为了检查最后一个元素是否在列表中多次存在,您需要检查当前元素是否与最后一个元素相等并且它们的索引是否不同(这意味着存在多个具有相同值的元素)。我的建议如下:

      def go(list1):
          length = len(list1)
          for i in range(0,length):
              if list1[i]==list1[-1] and not i==length-1:
                  return True
          else:
              return False
      
      print ( go( [-99,1,2,3,4,5,6,7,8,9,10,5] ) )
      print ( go( [10,9,8,7,6,5,4,3,2,1,9] ) )
      print ( go( [10,20,30,40,50,-11818,40,30,20,10] ) )
      print ( go( [32767] ) )
      print ( go( [7,7,7,7] ) )
      print ( go( [9,10,-88,100,-555,1000] ) )
      print ( go( [10,10,10,11,456,10,10] ) )
      print ( go( [-111,1,2,3,9,11,20,30] ) )
      print ( go( [9,8,7,6,5,4,3,2,0,-2,9,9] ) )
      print ( go( [12,15,18,21,23,1000] ) )
      print ( go( [250,19,17,15,13,11,10,9,6,3,2,1,250] ) )
      print ( go( [] ) )
      

      输出:

      True
      True
      True
      False
      True
      False
      True
      False
      True
      False
      True
      False
      

      【讨论】:

        猜你喜欢
        • 2013-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多