6

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

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

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

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

4

6 回答 6

12

使用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]'
于 2013-04-22T20:22:40.950 回答
8

如果你想使用循环,你必须使用你已经见过的一个列表或一组数字。然后,在循环时,您将与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,但其他答案已经涵盖了这一点。要使用内置函数,您可以使用生成器表达式生成一组出现多次的数字,并且set.

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调用中。seen最终,它将结果集转换为列表并打印内容。

于 2013-04-22T20:21:58.980 回答
5

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

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

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

于 2013-04-22T20:22:40.267 回答
1

您可以将列表转换为一组

myset = set(mylist)

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

这是因为如果几个元素相等,一个集合只包含每个元素一次——就像数学意义上的集合一样。

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

于 2013-04-22T20:22:27.583 回答
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)
于 2013-04-22T20:26:24.020 回答
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)
于 2013-04-22T20:31:57.927 回答