prr*_*rao 40 python list repeat
我有一个Python列表,我想知道'1'
在这个列表中计算项目出现次数的最快方法是什么.在我的实际情况中,该项目可以发生数万次,这就是为什么我想要一个快速的方式.
['1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '7', '7', '7', '10', '10']
Run Code Online (Sandbox Code Playgroud)
该.count
模块有帮助吗?我正在使用Python 2.7
Jak*_*yer 71
a = ['1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '7', '7', '7', '10', '10']
print a.count("1")
Run Code Online (Sandbox Code Playgroud)
它可能在C级别上进行了大量优化.
编辑:我随机生成了一个大型列表.
In [8]: len(a)
Out[8]: 6339347
In [9]: %timeit a.count("1")
10 loops, best of 3: 86.4 ms per loop
Run Code Online (Sandbox Code Playgroud)
编辑编辑:这可以通过collections.Counter完成
a = Counter(your_list)
print a['1']
Run Code Online (Sandbox Code Playgroud)
在我上一个时间示例中使用相同的列表
In [17]: %timeit Counter(a)['1']
1 loops, best of 3: 1.52 s per loop
Run Code Online (Sandbox Code Playgroud)
我的时间过于简单化,并且取决于许多不同的因素,但它为您提供了一个关于性能的良好线索.
这是一些分析
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.Prof
iler' 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.Prof
iler' objects}
6339347 0.356 0.000 0.356 0.000 {method 'get' of 'dict' objects}
Run Code Online (Sandbox Code Playgroud)
小智 13
通过使用Counter字典以最有效的方式计算所有元素的出现以及python列表中最常见的元素及其出现值.
如果我们的python列表是: -
l=['1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '7', '7', '7', '10', '10']
Run Code Online (Sandbox Code Playgroud)
要查找python列表中每个项目的出现,请使用以下内容: -
\>>from collections import Counter
\>>c=Counter(l)
\>>print c
Counter({'1': 6, '2': 4, '7': 3, '10': 2})
Run Code Online (Sandbox Code Playgroud)
要查找python列表中最多/最高出现的项目: -
\>>k=c.most_common()
\>>k
[('1', 6), ('2', 4), ('7', 3), ('10', 2)]
Run Code Online (Sandbox Code Playgroud)
最高的一个: -
\>>k[0][1]
6
Run Code Online (Sandbox Code Playgroud)
对于项目只需使用k [0] [0]
\>>k[0][0]
'1'
Run Code Online (Sandbox Code Playgroud)
对于第n个最高项目及其在列表中的出现次数,请使用以下内容: -
**对于n = 2**
\>>print k[n-1][0] # For item
2
\>>print k[n-1][1] # For value
4
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
83509 次 |
最近记录: |