繁体   English   中英

Python:无法使用列表索引检查重复项

[英]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 FALSEreturn 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] 排除 ......任何ab

轻松解决:在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM