[英]Python: Unable to check for duplicates using list indexes
由于某种原因,相同的方法对一种功能起作用,而对另一种功能无效。 已经起作用的功能定义如下:
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 FALSE
则return TRUE
。 但是,然后要求我创建另一个功能,除了这次复制列表并对其进行排序。 然后遍历每个索引以获取列表中的值,以检查该索引处的值是否等于下一个较高索引处的值。 但是无论输入什么,它始终返回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']) )
您的错误是,通过检查if list_copy[index] in list_copy[index + 1: -1]
是否没有检查列表中的最后一项。
请记住,在Python中,它总是“上的约束排除”:所以somelist[a:b]
将跨越somelist[a]
包括以somelist[b]
排除 ......任何a
和b
。
轻松解决:在list_copy[index + 1:]
。 IOW,不给切片指定上限,因此切片将一直运行到列表的末尾。
顺便说一句,如果列表中的项目是可散列的,则您的方法非常可疑-在这种情况下,
def is_unique3(myList):
return len(myList) == len(set(myList))
将会更快,而且也更不容易出现错误:-)
尝试以下行,而不是您的-1索引列表的unique1:
lst[current_index] in lst[current_index + 1:None:-1]:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.