由于某种原因,相同的方法适用于一个功能而不是另一个功能。已经运行的功能定义如下:
def is_unique1(lst):
for item in lst:
current_index = lst.index(item)
if lst[current_index] in lst[current_index + 1:-1]:
return False
return True
您传入一个列表并检查它的唯一性,如果它是唯一的,那么return TRUE
如果不是return FALSE
。然而,我被要求创建另一个函数,除了这次复制列表并对其进行排序。然后迭代列表中值的每个索引,以检查该索引处的值是否等于下一个更高索引处的值。但无论输入什么,它都会保持返回TRUE。该函数如下所示:
def is_unique2 ( myList ):
list_copy = list(myList)
list_copy.sort()
print(list_copy)
for item in list_copy:
index = list_copy.index(item)
if list_copy[index] in list_copy[index + 1: -1]:
return False
return True
为什么会这样。我是否错误地使用了切片。我正在检查list_copy[index]
的当前值是否在index + 1
。我正在测试它:
print('\nTesting is_unique2')
print (is_unique2(['raisin', 'apricot', 'celery', 'carrot']) )
print (is_unique2(['raisin', 'apricot', 'raisin', 'carrot']) )
答案 0 :(得分:3)
您的错误是检查if list_copy[index] in list_copy[index + 1: -1]
您不检查列表中的最后项。
请记住,在Python中,它始终是“上限被排除”:因此somelist[a:b]
将somelist[a]
包含到somelist[b]
排除 ...对于任何{ {1}}和a
。
轻松修复:在b
中使用。 IOW,不给切片上限,因此切片将一直运行到列表的末尾。
顺便提一下,如果列表的项目是可清除的,那么您的方法非常可疑 - 在这种情况下,
list_copy[index + 1:]
会更快,也更不容易出错: - )
答案 1 :(得分:-1)
尝试使用此行而不是unique1的<-1索引列表:
lst[current_index] in lst[current_index + 1:None:-1]: