【发布时间】:2011-07-21 17:17:51
【问题描述】:
我基本上有一个由50个整数组成的数组,我需要找出这50个整数是否相等,如果相等,我需要执行一个动作。
我该怎么做呢?据我所知,Python 中目前还没有这样的函数吗?
【问题讨论】:
我基本上有一个由50个整数组成的数组,我需要找出这50个整数是否相等,如果相等,我需要执行一个动作。
我该怎么做呢?据我所知,Python 中目前还没有这样的函数吗?
【问题讨论】:
如果你的意思是你有一个列表并且你想知道是否有任何重复的值,那么从列表中创建一个集合,看看它是否比列表短:
if len(set(my_list)) < len(my_list):
print "There's a dupe!"
不过,这不会告诉您重复值是什么。
【讨论】:
如果你有 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]
【讨论】:
如果您的操作需要知道数字或该数字在您的输入列表中重复的次数,那么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
【讨论】:
您可以将列表转换为 Set,并检查它们的长度。
>>> a = [1, 2, 3]
>>> len(set(a)) == len(a)
True
>>> a = [1, 2, 3, 4, 4]
>>> len(set(a)) == len(a)
False
【讨论】:
>>> 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]
【讨论】: