frozenset 至少 x 个元素
frozenset at least x elements
我目前有这段代码,它检查数组中的所有元素是否相同。如果是这样,return 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]
将 return 也是如此。因为有 5 次 1
不使用集合,而是使用 bag or multiset type。多重集计算唯一值出现的次数。
在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
from collections import Counter
def all_equal(lst, count):
return any(v >= count for v in Counter(lst).values())
使用 Counter
的简短回答:
from collections import Counter
def some_equal(lst):
return max(Counter(lst).values()) >= 5
Counter
是一个 "set" 计算其元素出现的次数。
Counter.keys()
returns 元素,以及 Counter().values()
returns 它们出现的次数。因此这 max
确保有一个元素出现超过 5 次。
您也可以边走边检查,如果任何值为 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 一样快,有时甚至更快。
我目前有这段代码,它检查数组中的所有元素是否相同。如果是这样,return 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]
将 return 也是如此。因为有 5 次 1
不使用集合,而是使用 bag or multiset type。多重集计算唯一值出现的次数。
在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
from collections import Counter
def all_equal(lst, count):
return any(v >= count for v in Counter(lst).values())
使用 Counter
的简短回答:
from collections import Counter
def some_equal(lst):
return max(Counter(lst).values()) >= 5
Counter
是一个 "set" 计算其元素出现的次数。
Counter.keys()
returns 元素,以及 Counter().values()
returns 它们出现的次数。因此这 max
确保有一个元素出现超过 5 次。
您也可以边走边检查,如果任何值为 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 一样快,有时甚至更快。