3

私は現在このコードを持っています。配列内のすべての要素が同じかどうかをチェックします。その場合は 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 も返します。1 は 5 回あるので

4

4 に答える 4

8

使用collections.Counter():

from collections import Counter

def all_equal(lst, count):
    return any(v >= count for v in Counter(lst).values())
于 2016-07-10T13:33:04.523 に答える
7

セットを使用する代わりに、バッグまたはマルチセットタイプを使用します。マルチセットは、一意の値が発生する回数をカウントします。

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
于 2016-07-10T13:31:59.307 に答える
3

を使用した短い答えCounter:

from collections import Counter

def some_equal(lst):
    return max(Counter(lst).values()) >= 5

Counterその要素の出現をカウントする「セット」です。 Counter.keys()要素をCounter().values()返し、それらの出現回数を返します。したがって、これmaxにより、5 回以上出現する要素が存在することが保証されます。

于 2016-07-10T13:33:48.950 に答える