Python 至少设置x个元素
我目前有这段代码,它检查数组中的所有元素是否相同。如果是这种情况,则返回truePython 至少设置x个元素,python,frozenset,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
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而不是使用集合,所以使用集合。多重集统计唯一值出现的次数 在Python中,这是: 使用:
使用
计数器的简短回答
:
from collections import Counter
def some_equal(lst):
return max(Counter(lst).values()) >= 5
计数器
是一个“集合”计数器,用于计算其元素的出现次数。
Counter.keys()
返回元素,Counter().values()
返回元素出现的次数。因此,此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同样快,有时甚至更快。
max()
将查看所有值,而您可以在第一个值>=5时停止。@eugeney好的,渐进复杂性是相同的:),但即使不是,也会返回Truetrue@Sharpless512:那么什么时候不是真的?请具体说明。@Sharpless512:您的问题意味着您希望在两种情况下返回true:要么只有一个唯一元素,要么一个元素至少出现5次。这就是我编的代码,如果这是错误的,你需要澄清你的问题。只有在至少出现5次相同的情况下,它才应该返回Trueelement@Sharpless512:那么您想忽略“只有一个唯一值*案例?然后简单地放弃第一个if
测试。请在您的问题中明确这一点,它现在看起来好像您想要将第二个测试添加到现有函数中。
from collections import Counter
def some_equal(lst):
return max(Counter(lst).values()) >= 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