from __future__ import print_function
import timeit
t1=timeit.Timer('Counter(l)', \
'import random;import string;from collections import Counter;n=1000;l=[random.choice(string.ascii_letters) for x in range(n)]'
)
t2=timeit.Timer('[[x,l.count(x)] for x in set(l)]',
'import random;import string;n=1000;l=[random.choice(string.ascii_letters) for x in range(n)]'
)
print("Counter(): ", t1.repeat(repeat=3,number=10000))
print("count(): ", t2.repeat(repeat=3,number=10000)
如果只需要一个项目的计数,请使用
count
方法:如果要计算多个项目,请不要使用此选项。在循环中调用
count
需要为每个count
调用单独传递列表,这对性能可能是灾难性的。如果你想计算所有项目,甚至只是多个项目,请使用Counter
,如其他答案中所述。计算列表中一个项目的出现次数
只计算一个列表项的出现次数,可以使用
count()
计算列表中所有项的出现次数也称为“计算”列表或创建计数计数器。
使用count()计算所有项目
要计算项目在
l
中的出现次数,只需使用列表理解和count()
方法(或者类似的字典
dict((x,l.count(x)) for x in set(l))
)示例:
使用Counter()计算所有项目
或者,还有来自
collections
库的更快的Counter
类示例:
计数器要快多少?
我检查了列表计数的速度
Counter
。我用几个值n
尝试了这两种方法,结果显示Counter
的速度大约是常数因子2。以下是我使用的脚本:
以及输出:
如果您使用的是Python2.7或3.x,并且希望每个元素出现的次数为:
相关问题 更多 >
编程相关推荐