列表列表python:组合大小相同的列表元素

abi*_*tio 1 python list-comprehension list python-3.x

我在python中有一个列表列表:

[[1],[2],[3,4],[5,6],[7,8,9,10,11],[12,13,14,15,16],[17]]
Run Code Online (Sandbox Code Playgroud)

我想将子列表组合成一个子列表,如果它们具有相同数量的元素:

[[1,2,17],[3,4,5,6],[7,8,9,10,11,12,13,14,15,16]]
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?

Rak*_*esh 5

使用groupbychain来自itertools

例如:

from itertools import groupby, chain

lst = [[1],[2],[3,4],[5,6],[7,8,9,10,11],[12,13,14,15,16],[17]]

result = [list(chain.from_iterable(v)) for k, v in groupby(sorted(lst, key=lambda h: len(h)), lambda x: len(x))]
print(result)
Run Code Online (Sandbox Code Playgroud)

输出:

[[1, 2, 17], [3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]]
Run Code Online (Sandbox Code Playgroud)
  • sorted(lst, key=lambda h: len(h)) 按len排序列表
  • 然后用于groupby按列表len对列表进行分组