我基本上有一个50个整数的数组,我需要找出50个整数中的任何一个是否相等,如果它们是,我需要执行一个动作。
我该怎么做呢?据我所知,目前Python中没有一个函数可以实现吗?
答案 0 :(得分:9)
如果你的意思是你有一个列表而你想知道是否有任何重复的值,那么从列表中创建一个集合,看它是否比列表短:
if len(set(my_list)) < len(my_list):
print "There's a dupe!"
但这并不会告诉你重复的值是什么。
答案 1 :(得分:5)
如果您使用的是Python 2.7+,则可以使用Counter
。
>>> import collections
>>> input = [1, 1, 3, 6, 4, 8, 8, 5, 6]
>>> c = collections.Counter(input)
>>> c
Counter({1: 2, 6: 2, 8: 2, 3: 1, 4: 1, 5: 1})
>>> duplicates = [i for i in c if c[i] > 1]
>>> duplicates
[1, 6, 8]
答案 2 :(得分:2)
如果您的操作需要知道该数字在输入列表中重复的次数或次数,则groupby
是一个不错的选择。
>>> from itertools import groupby
>>> for x in groupby([1,1,2,2,2,3]):
... print x[0],len(list(x[1]))
...
1 2
2 3
3 1
第一个数字是元素,第二个数字是重复数。 groupby
适用于排序列表,因此请确保对输入列表进行排序。
>>> for x in groupby(sorted([1,1,2,4,2,2,3])):
... print x[0],len(list(x[1]))
...
1 2
2 3
3 1
4 1
答案 3 :(得分:1)
您可以将列表转换为Set,并检查它们的长度。
>>> a = [1, 2, 3]
>>> len(set(a)) == len(a)
True
>>> a = [1, 2, 3, 4, 4]
>>> len(set(a)) == len(a)
False
答案 4 :(得分:0)
>>> arbitrary_list = [1, 1, 2, 3, 4, 4, 4]
>>> item_occurence = dict([(item, list.count(item)) for item in arbitrary_list])
{1: 2, 2: 1, 3: 1, 4: 3}
如果您想查看哪些值不唯一,可以通过
获取这些值的列表>>> filter(lambda item: item_occurence[item] > 1, item_occurence)
[1, 4]