Python:给定一个列表列表,创建一个按内部列表中出现次数排序的列表

gor*_*ndy 3 python list

我有一份清单清单:

[['a','b','c'], ['a'], ['a','b']]
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序并返回单个列表,因此输出如下所示:

['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

即按每个元素出现的次数排序.a出现3次,b出现两次,c出现一次.

我该怎么做呢?

Sam*_*uns 7

使用collections.Counter,, itertools.chain.from_iterable列表理解:

from itertools import chain
from collections import Counter

data = [['a', 'b', 'c'], ['a'], ['a', 'b']]

d = Counter(chain.from_iterable(data))
print([i for i, c in d.most_common()])
Run Code Online (Sandbox Code Playgroud)

输出:

['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

注意:如果要计算列表中某些项目的频率,请记住使用Counter,这非常有用.


Ter*_*ryA 5

使用itertools.chain.from_iterable()先压平列表,然后collections.Counter()计数的元素.

>>> from collections import Counter
>>> from itertools import chain
>>> [x[0] for x in Counter(chain.from_iterable(mylist)).most_common())
['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)