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

Python:无法使用列表索引检查重复项,python,list,python-3.x,Python,List,Python 3.x,出于某种原因,相同的方法适用于一个函数,而不适用于另一个函数。已起作用的功能定义如下: 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 您传入一个列表并检查其唯一性,如果它是唯一的

出于某种原因,相同的方法适用于一个函数,而不适用于另一个函数。已起作用的功能定义如下:

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
您传入一个列表并检查其唯一性,如果它是唯一的,则
返回TRUE
如果不是
返回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
为什么会发生这种情况。我使用的切片有误吗。我正在检查
列表的当前值是否在
索引+1
中。我正在这样测试它:

print('\nTesting is_unique2')
print (is_unique2(['raisin', 'apricot', 'celery', 'carrot']) )
print (is_unique2(['raisin', 'apricot', 'raisin', 'carrot']) )

您的错误在于,通过在列表复制[index+1:-1]
中检查
if list\u copy[index],您没有检查列表中的最后一项

记住,在Python中,它总是“上限排除”:因此
somelist[a:b]
将跨越
somelist[a]
包括到
somelist[b]
排除的。。。对于任何
a
b

简易修复:用于
列表\u copy[index+1:][/code>。请注意,不要为切片指定上限,因此切片将一直运行到列表的末尾

顺便说一下,如果列表的项是可散列的,那么您的方法是非常可疑的——在这种情况下

def is_unique3(myList):
    return len(myList) == len(set(myList))

将更快,更不容易出现错误:-)

请尝试这一行,而不是unique1的-1索引列表:

lst[current_index] in lst[current_index + 1:None:-1]:

可能重复的只需使用
reversed()
而不是使用-1[在unique1中]来获取反转列表可以吗?另外,您不能从unique2调用unique1,以便首先获取唯一列表,即工作版本,然后进行排序吗?请尝试排序()方法。为了使它成为一个更好的问题,请提供您的测试输入。您应该查找
enumerate()
函数,它将使您的生活更加轻松。
在somelist中
在reversed(somelist)中
将始终返回完全相同的布尔值,因此在我看来,
反转的用法有些可疑。