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

时间:2013-04-22 20:20:10

标签: python

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

myList=[1,7,9,3,1,2,8]

在这种情况下,“myList”中会重复“1”。

如何创建一个程序来检查列表中的两个数字是否相同(重复)。尝试使用循环,这样我就能理解,因为我还没有学过复杂的函数。

6 个答案:

答案 0 :(得分:9)

使用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})'

使用Collections.Counter,您知道在源列表myList的每个元素中重复了多少次。

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

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

答案 1 :(得分:6)

如果你想使用循环,你必须使用你已经看过的列表或一组数字。然后在循环时,如果已经看到该号码,则使用in运算符进行检查。

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

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

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

我会说最pythonic的方式是使用collections.Counter,但其他答案已经涵盖了这一点。要使用内置功能,您可以生成一组使用generator expressionset多次出现的数字。

In [39]: seen = set()

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

此处表达式将遍历myList中的所有值,并将其添加到名为set的{​​{1}}(如果已经看到它们)。最终,它会将结果集转换为列表并打印内容。

答案 2 :(得分:3)

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

if len(myList) != len(set(myList)):
    print "duplicates"

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

答案 3 :(得分:1)

您可以将列表转换为集合

myset = set(mylist)

并检查长度是否不同。如果是这样,那就重复了。

这是因为如果几个元素相等,一个集合只会使每个元素都有一次 - 就像数学意义上的集合一样。

如果您不需要知道哪个号码是重复的,这是最简单的方法。

答案 4 :(得分:1)

myList=[1,7,9,3,1,2,8]
counts = {elem:myList.count(elem) for elem in set(myList)}
for i in counts:
    if counts[i] > 1:
       print '{} occurs more than once'.format(i)

如果您不想使用词典理解:

myList=[1,7,9,3,1,2,8]
counts = {}
for elem in set(myList):
    counts[elem] = myList.count(elem)
    if counts[elem] > 1:
        print '{} occurs more than once'.format(i)

答案 5 :(得分:1)

可能不是最容易理解的,但这就是我的做法。

seen = set()
duplicated = [t for t in my_list if t in seen or seen.add(t)]

它等同于(并且更容易理解)

duplicated = []
seen = set()
for elem in my_list:
    if elem in seen:
        duplicated.append(elem)
    else:
        seen.add(elem)