我很好奇我将如何检查列表中的2个数字是否相同.例如,
myList=[1,7,9,3,1,2,8]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"myList"中重复"1".
我如何制作一个程序来检查列表中的两个数字是否相同(重复).尝试使用循环,所以我可以理解,因为我还没有学习复杂的功能.
Sam*_*uns 10
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)
如果你想使用循环,你将不得不使用你已经看过的列表或一组数字.然后在循环时,您将检查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.最终,它会将结果集转换为列表并打印内容.
您可以使用内置set()函数将列表转换为集合,集合不能有重复项。因此,如果 Set 和 List 的大小不同,则您的 List 有重复项。
if len(myList) != len(set(myList)):
print "duplicates"
Run Code Online (Sandbox Code Playgroud)
这假设您不关心重复项是什么,您只想知道是否存在 1 个或多个重复项。
| 归档时间: |
|
| 查看次数: |
14602 次 |
| 最近记录: |