a = [‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘2’, ‘2’, ‘2’, ‘2’, ‘7’, ‘7’, ‘7’, ‘10’, ‘10’]
print a.count(“1”)
它可能在C级别上进行了大量优化。
编辑:我随机生成一个大列表。
In [8]: len(a)Out[8]: 6339347In [9]: %timeit a.count("1")10 loops, best of 3: 86.4 ms per loop
编辑编辑:这可以通过collections.Counter完成。
a = Counter(your_list)print a['1']
在我的上一个计时示例中使用相同的列表
In [17]: %timeit Counter(a)['1']1 loops, best of 3: 1.52 s per loop
我的时间安排简单而又受许多不同因素的影响,但它为您提供了很好的性能线索。
这是一些分析
In [24]: profile.run("a.count('1')") 3 function calls in 0.091 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.091 0.091 <string>:1(<module>) 1 0.091 0.091 0.091 0.091 {method 'count' of 'list' objects} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}In [25]: profile.run("b = Counter(a); b['1']") 6339356 function calls in 2.143 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 2.143 2.143 <string>:1(<module>) 2 0.000 0.000 0.000 0.000 _weakrefset.py:68(__contains__) 1 0.000 0.000 0.000 0.000 abc.py:128(__instancecheck__) 1 0.000 0.000 2.143 2.143 collections.py:407(__init__) 1 1.788 1.788 2.143 2.143 collections.py:470(update) 1 0.000 0.000 0.000 0.000 {getattr} 1 0.000 0.000 0.000 0.000 {isinstance} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 6339347 0.356 0.000 0.356 0.000 {method 'get' of 'dict' objects}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)