Python 至少设置x个元素

Python 至少设置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

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