替代python中的list.count()

时间:2012-12-28 17:58:43

标签: python

我希望能够在python中为内置计数编写替代代码: 此代码有效

def count(element,seq):
    """Counts how often an element occurs
    ...in a sequence"""
    mycount = seq.count(element)
    return mycount

但是我想用for循环(或者其他方式)来编写它,我已经做到了这一点:

def count(element,seq):
    """Counts how often an element occurs
    ...in a sequence"""
    for i in seq:
        if  element == seq:
            print i

我不确定如何将重新生成的元素作为整数返回。任何帮助表示赞赏!!

4 个答案:

答案 0 :(得分:6)

使用sum()和生成器表达式:

def count(element,seq):
    """Counts how often an element occurs
    ...in a sequence"""
    return sum(1 for i in seq if i == element)

这样做:它会遍历seq中的每个项目,如果该项目等于element,则会生成1sum()加起来得到总数。

使用这样的生成器表达式意味着一次只能引用一个seq项,允许您有效地扫描巨大的序列。

答案 1 :(得分:2)

这个怎么样:

def count(element,seq):
    """Counts how often an element occurs
    ...in a sequence"""
    count = 0
    for i in seq:
        if  element == i:
            count += 1
    return count

这样做:它会遍历seq中的每个项目,如果该项目等于element,则会将1添加到count(最初为0 {1}})然后在循环结束后返回count

使用这样的for循环意味着一次只能引用一个seq项,允许您有效地扫描巨大的序列。

答案 2 :(得分:2)

另一种方式

from collections import Counter
def count(elem, seq):
    return Counter(seq)[elem]

另一种方式

>>> from itertools import compress
>>> len(list(compress(seq, [e == 1 for e in seq])))
3

略有变化

>>> sum(1 for _ in compress(seq, [e == 1 for e in seq]))
3

使用过滤器的另一种实现

>>> len(filter(None, [e == 1 for e in seq]))
3

答案 3 :(得分:1)

如果您想将其写为for循环,请按照您的示例:

def count(element, sequence):
    c = 0
    for e in sequence:
        if e == element:
            c += 1
    return c