例如,如果我有一个列表如下:
[3, 3, 3, 3, 3, 3, 100, 1, 1, 1, 1, 1, 1, 200, 3, 3, 3, 100, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)
如何删除重复的元素并表示相同的元素,然后是重复的次数?示例输出:
[3, 6, 100, 1, 6, 200, 3, 3, 100, 1, 3]
Run Code Online (Sandbox Code Playgroud)
其中3重复6次...... 1重复6次......依此类推
您可以itertools.groupby在此处使用生成器功能:
>>> from itertools import groupby
>>> lst = [3, 3, 3, 3, 3, 3, 100, 1, 1, 1, 1, 1, 1, 200, 3, 3, 3, 100, 1, 1, 1]
>>> def solve(seq):
for k, g in groupby(seq):
length = sum(1 for _ in g)
if length > 1:
yield k
yield length
else:
yield k
...
>>> list(solve(lst))
[3, 6, 100, 1, 6, 200, 3, 3, 100, 1, 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |