如何检查一个列表中是否包含重复项?

11
我希望验证一个列表,以确保没有重复的项目。我的问题是我不知道如何在 if 语句中实现这一点。在Python中有没有方法或类似的东西,如果列表中有重复项将返回 False?以下是我的想法:
lst = ["1","2","3","3","4"]

if #lst contains no duplicates :
    print("success")
else:
    print("duplicate found")

提前感谢您。


3
我会将其制成一个集合,并检查长度是否相同。 - MrAlexBailey
2
可能是列表中删除重复项的重复问题。 - Pavel
1
使用 set(lst) 将列表转换为集合,然后比较两者的长度。如果它们相同,则不会有重复项。 - wtreston
4
可能是在平面列表中检查重复项的重复问题。 - EoinS
5个回答

24
据Jkdc所说,将其转换为集合并比较长度。
lst = ["1","2","3","3","4"]

if len(set(lst)) == len(lst):
    print("success")
else:
    print("duplicate found")

3
lst是一个字典列表时,这种方法行不通。然后使用set(lst)会抛出一个TypeError: unhashable type: 'dict'的错误。 - the21st

8

利用Python的set可能不包含重复项的特性。 has_duplicate()函数负责确定列表是否包含重复项。

def has_duplicates(listObj):
    return len(listObj) != len(set(listObj))


print(has_duplicates([1, 2, 1, 1, 4, 7]))    ## PRINTS: True
print(has_duplicates([9, 2, 5, 4, 7]))       ## PRINTS: False

1
你可以简化为 return len(listObj) != len(set(listObj)) - Ma0

0
def check_duplicates(lst):
    seen = {}
    for item in lst:
        if seen.get(item):
            print("duplicate found")
            return
        else:
            seen[item] = True
    print("success")

0
def checkDuplicate():
    count = {}
    for item in lst:
            if item not in count:
                count[item] = 1
            else:
                return True
    return False


5
虽然这段代码可能解决了问题,但是如果你能够解释一下它是如何解决问题的,以及为什么能够解决问题,那么会大大提高你回答的质量,也有可能会获得更多点赞。请记住,你的回答不仅是为了当前提问者,还是为将来的读者而准备的。请编辑你的答案并添加解释,说明其局限性和假设条件。 - Brian61354270

0

看这个,最简单的方法(至少对我来说)..

lst = ["1","2","3","3","4"]
status = True
for item in lst:
    if lst.count(item) > 1:
      # the count functions counts how many times the "item" is in lst
        status = False

if status == True:
    print("No duplicates")
else:
    print("Duplicates found")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接