如何检查列表中的两个数字是否相同

Dra*_*ter 3 python

我很好奇我将如何检查列表中的2个数字是否相同.例如,

myList=[1,7,9,3,1,2,8]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,"myList"中重复"1".

我如何制作一个程序来检查列表中的两个数字是否相同(重复).尝试使用循环,所以我可以理解,因为我还没有学习复杂的功能.

Sam*_*uns 10

使用collections.Counter:

from collections import Counter

myList = [1, 7, 9, 3, 1, 2, 8]
counter = Counter(myList)
print(counter) # prints 'Counter({1: 2, 2: 1, 3: 1, 7: 1, 8: 1, 9: 1})'
Run Code Online (Sandbox Code Playgroud)

有了Collections.Counter,你就知道你的源列表的每个元素重复了多少次myList.

之后,您可以使用简单的方法list comprehension来了解重复的元素:

result = [i for i, j in counter.items() if j > 1]
print(result) # prints '[1]'
Run Code Online (Sandbox Code Playgroud)

  • @Ashwini Chaudhary:他说过"尝试使用循环导致我没有学习复杂的功能".我不认为使用`collections.Counter`是复杂的东西:) (4认同)

msv*_*kon 7

如果你想使用循环,你将不得不使用你已经看过的列表或一组数字.然后在循环时,您将检查in操作员是否已看到该号码.

seen = []
for number in myList:
    if number in seen:
        print "Number repeated!"
    else:
        seen.append(number)
Run Code Online (Sandbox Code Playgroud)

set不允许重复,因此它非常适合这种算法.正如评论中所提到的,检查元素是否在集合中的时间复杂度对于平均情况(O(1))是不变的,因此如果你有很多数字,这会更有效.

seen = set()
for number in myList:
    if number in seen:
        print "Number repeated!"
    seen.add(number) # won't duplicate
Run Code Online (Sandbox Code Playgroud)

我会说最pythonic的方式是使用collections.Counter,但其他答案已经涵盖了这一点.使用内置的,你可以生成一组出现一次使用多个号码生成器表达式set.

In [39]: seen = set()

In [40]: print list(set(x for x in myList if x in seen or seen.add(x)))
[1]
Run Code Online (Sandbox Code Playgroud)

这里表达式将循环遍历所有值,如果已经看到myList它们,则将它们添加到set被调用者seen.最终,它会将结果集转换为列表并打印内容.

  • 在一个理想的世界中,你会把`看见'变成一个集而不是一个列表,但这个想法仍然是一样的. (2认同)

Hun*_*len 5

您可以使用内置set()函数将列表转换为集合,集合不能有重复项。因此,如果 Set 和 List 的大小不同,则您的 List 有重复项。

if len(myList) != len(set(myList)):
    print "duplicates"
Run Code Online (Sandbox Code Playgroud)

这假设您不关心重复项是什么,您只想知道是否存在 1 个或多个重复项。