我希望将一个列表转换为相等值的较小列表。我有一个例子是:
["a", "a", "a", "b", "b", "c", "c", "c", "c"]
Run Code Online (Sandbox Code Playgroud)
至
[["a", "a", "a"], ["b", "b"], ["c", "c", "c", "c"]]
Run Code Online (Sandbox Code Playgroud)
您认为最有效的方法是什么?
您可以itertools.groupby用来解决问题:
>>> from itertools import groupby
>>> [list(grp) for k, grp in groupby(["a", "a", "a", "b", "b", "c", "c", "c", "c"])]
[['a', 'a', 'a'], ['b', 'b'], ['c', 'c', 'c', 'c']]
Run Code Online (Sandbox Code Playgroud)
它仅对连续的相等元素进行分组,但在您的情况下似乎足够了。
你可以使用collections.Counter
>>> lst = ["a", "a", "a", "b", "b", "c", "c", "c", "c"]
>>> import collections
>>> collections.Counter(lst).most_common()
[('c', 4), ('a', 3), ('b', 2)]
Run Code Online (Sandbox Code Playgroud)
即使值没有排序,这也可以工作,并提供非常紧凑的表示,然后您可以根据需要将其扩展为列表:
>>> [[i]*n for i,n in collections.Counter(lst).most_common()]
[['c', 'c', 'c', 'c'], ['a', 'a', 'a'], ['b', 'b']]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |