我希望能够在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
我不确定如何将重新生成的元素作为整数返回。任何帮助表示赞赏!!
答案 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
,则会生成1
,sum()
加起来得到总数。
使用这样的生成器表达式意味着一次只能引用一个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