python排序列表根据元素数量

时间:2017-03-07 04:12:45

标签: python list sorting

我需要根据元素的数量对集合中的列表进行排序。 以下是我的一些清单:

['RB', 'RB', 'VBD', 'TO', 'PRP', 'RB']
['PRP', 'RB', 'RB', 'JJ']
['PRP', 'MD', 'RB', 'VB', 'PRP$', 'NN', 'RB', 'IN', 'NN']
['RB', 'DT', 'NN']
['PRP', 'RB', 'VBP', 'PRP']
['PRP', 'RB', 'VBD', 'IN', 'DT']
['MD', 'RB', 'VB', 'IN', 'NNP', 'RB']
['RB', 'CD']

这是寻求的输出:

['RB', 'CD']
['RB', 'DT', 'NN']
['PRP', 'RB', 'RB', 'JJ']
['PRP', 'RB', 'VBP', 'PRP']
['PRP', 'RB', 'VBD', 'IN', 'DT']
['MD', 'RB', 'VB', 'IN', 'NNP', 'RB']
['RB', 'RB', 'VBD', 'TO', 'PRP', 'RB']
['PRP', 'MD', 'RB', 'VB', 'PRP$', 'NN', 'RB', 'IN', 'NN']

根据列表中元素的数量,列表从最短到最大排序。

有人可以帮忙吗?...我做了一些研究,但找不到我的方法。非常感谢。有字符串长度的解决方案,但不是列表中的元素

2 个答案:

答案 0 :(得分:2)

使用sorted()函数,使用每个元素的长度作为排序键:

sorted(the_list, key=len)

示例:

>>> the_list = [
...     ['RB', 'RB', 'VBD', 'TO', 'PRP', 'RB'],
...     ['PRP', 'RB', 'RB', 'JJ'],
...     ['PRP', 'MD', 'RB', 'VB', 'PRP$', 'NN', 'RB', 'IN', 'NN'],
...     ['RB', 'DT', 'NN'],
...     ['PRP', 'RB', 'VBP', 'PRP'],
...     ['PRP', 'RB', 'VBD', 'IN', 'DT'],
...     ['MD', 'RB', 'VB', 'IN', 'NNP', 'RB'],
...     ['RB', 'CD']
... ]
>>> sorted(the_list, key=len)
[['RB', 'CD'], ['RB', 'DT', 'NN'], ['PRP', 'RB', 'RB', 'JJ'], ['PRP', 'RB', 'VBP', 'PRP'], ['PRP', 'RB', 'VBD', 'IN', 'DT'], ['RB', 'RB', 'VBD', 'TO', 'PRP', 'RB'], ['MD', 'RB', 'VB', 'IN', 'NNP', 'RB'], ['PRP', 'MD', 'RB', 'VB', 'PRP$', 'NN', 'RB', 'IN', 'NN']]

答案 1 :(得分:-1)

您可以创建列表列表,然后按以下方式排序:

a = ['RB', 'RB', 'VBD', 'TO', 'PRP', 'RB']
b = ['PRP', 'RB', 'RB', 'JJ']

combo = [a,b]

sorted_list = sorted(combo, key=len)