我目前有这段代码,它会检查数组中的所有元素是否相同。如果是这种情况,请返回true
def all_equal(lst):
"""
>>> all_equal([1,1,1,1,1,1,1])
True
>>> all_equal([1,2,3,1])
False
"""
return len(frozenset(lst)) == 1
但我想要检查的是,是否至少有5个相同的元素。
那样
[1,1,1,1,1,2,2]
将返回True以及。因为有5次1
答案 0 :(得分:8)
from collections import Counter
def all_equal(lst, count):
return any(v >= count for v in Counter(lst).values())
答案 1 :(得分:7)
使用bag or multiset type而不是使用集合。 multiset计算唯一值出现的次数。
在Python中,collections.Counter()
object:
from collections import Counter
def all_equal(lst):
bag = Counter(lst)
if any(v >= 5 for v in bag.itervalues()):
# an element occurred at least 5 times
# (use bag.values() if using Python 3)
return True
return False
答案 2 :(得分:3)
使用Counter
的简短回答:
from collections import Counter
def some_equal(lst):
return max(Counter(lst).values()) >= 5
Counter
是计算其元素出现次数的“集合”。
Counter.keys()
返回元素,Counter().values()
返回其出现的数字。因此,max
确保有一个元素出现的次数超过5次。
答案 3 :(得分:2)
如果有任何值为5,你也可以随意检查,当你迭代时短路:
from collections import defaultdict
def five(it):
d = defaultdict(int)
for ele in it:
d[ele] += 1
if d[ele] == 5:
return True
return False
您可以使用计数器,但只计算 defaultdict 的速度很快,有时实际上更快。