给定:列表,例如l = [4,4,4,4,5,5,5,6,7,7,7] Todo:获取元素的计数并保持其出现顺序,例如:[( 4,4),(5,3),(6,1),(7,3)]
我可以这样做:
tmpL = [(i,l.count(i)) for i in l]
tmpS = set()
cntList = [x for x in tmpL if x not in tmpS and not tmpS.add(x)]
Run Code Online (Sandbox Code Playgroud)
但有更好的方法吗?我在这里看到了这个链接,但它对计数进行了排序,因此打破了顺序.
编辑:性能不是解决方案的问题,更可取的是内置的东西.
用途groupby:
>>> l = [4,4,4,4,5,5,5,6,7,7,7,2,2]
>>> from itertools import groupby
>>> [(i, l.count(i)) for i,_ in groupby(l)]
[(4, 4), (5, 3), (6, 1), (7, 3), (2, 2)]
Run Code Online (Sandbox Code Playgroud)
>>> import itertools
>>> [(k, len(list(g))) for k, g in itertools.groupby(l)]
[(4, 4), (5, 3), (6, 1), (7, 3)]
Run Code Online (Sandbox Code Playgroud)
这样可以保持项目的顺序,还可以重复项目:
>>> l=[4,4,4,4,5,5,5,6,7,7,7,4,4,4,4,4]
>>> [(k, len(list(g))) for k, g in itertools.groupby(l)]
[(4, 4), (5, 3), (6, 1), (7, 3), (4, 5)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1638 次 |
| 最近记录: |