1

我希望能够为 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

4 回答 4

7

使用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,它生成一个1,它sum()加起来得到总计数。

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

于 2012-12-28T18:00:59.093 回答
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,它添加1count(最初是0),然后count在循环结束后返回。

使用这样的 for 循环意味着一次只能seq引用一个项目,从而使您可以有效地扫描庞大的序列。

于 2012-12-28T18:02:52.390 回答
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
于 2012-12-28T18:07:32.913 回答
1

如果你想把它写成一个for循环,按照你的例子:

def count(element, sequence):
    c = 0
    for e in sequence:
        if e == element:
            c += 1
    return c
于 2012-12-28T18:03:01.170 回答