frozenset至少x个元素

时间:2016-07-10 13:26:59

标签: python frozenset

我目前有这段代码,它会检查数组中的所有元素是否相同。如果是这种情况,请返回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

4 个答案:

答案 0 :(得分:8)

使用collections.Counter()

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 的速度很快,有时实际上更快。