问题:
编写一个程序,搜索列表以查看列表中的最后一个值是否出现 不止一次。如果最后一个值出现多次,则返回true。否则,返回false。如果列表是 空,返回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
我做错了什么?为什么我的所有输出都得到假?
答案 0 :(得分:6)
您不应在此处使用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
答案 1 :(得分:2)
您的代码中存在一些错误:
range(0,len(list1))
应为range(0,len(list1)-1)
,因为您不想将最后一个元素与自身进行比较。list1[-1:]
应为list1[-1]
。前者选择一个切片,后者选择一个元素。话虽这么说,@ chrisz的解决方案更加Pythonic和简洁:)
答案 2 :(得分:1)
你的错误在于你试图将一个元素与一个列表进行比较。另一个错误是您使用关键字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