将列表拆分为较小的等值列表

Ene*_*sxg 1 python

我希望将一个列表转换为相等值的较小列表。我有一个例子是:

["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)

您认为最有效的方法是什么?

MSe*_*ert 5

您可以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)

它仅对连续的相等元素进行分组,但在您的情况下似乎足够了。


Jos*_*lls 5

你可以使用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)