我很好奇如何检查列表中的 2 个数字是否相同。例如,
myList=[1,7,9,3,1,2,8]
在这种情况下,“1”在“myList”中重复。
我将如何制作一个程序来检查列表中的两个数字是否相同(重复)。尝试使用循环以便我可以理解,因为我还没有学习复杂的功能。
我很好奇如何检查列表中的 2 个数字是否相同。例如,
myList=[1,7,9,3,1,2,8]
在这种情况下,“1”在“myList”中重复。
我将如何制作一个程序来检查列表中的两个数字是否相同(重复)。尝试使用循环以便我可以理解,因为我还没有学习复杂的功能。
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]'
如果你想使用循环,你必须使用你已经见过的一个列表或一组数字。然后,在循环时,您将与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
最终,它将结果集转换为列表并打印内容。
您可以使用内置set()
功能将列表转换为集合,集合不能有重复项。因此,如果 Set 和 List 的大小不同,则您的 List 有重复项。
if len(myList) != len(set(myList)):
print "duplicates"
这假设您不关心重复项是什么,您只想知道是否存在 1 个或多个重复项。
您可以将列表转换为一组
myset = set(mylist)
并检查长度是否不同。如果是这样,那就有重复了。
这是因为如果几个元素相等,一个集合只包含每个元素一次——就像数学意义上的集合一样。
如果您不需要知道哪个号码重复,这是最简单的方法。
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)
也许不是最容易理解的,但这就是我的做法。
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)