通过列表长度的更改对嵌套列表进行分组

时间:2018-02-09 12:55:11

标签: python list

我有以下表格的嵌套列表

inputlist = [[1,2,3],[4,5,6],[7,8,9],[1,2,3,4],[5,6,7,8],[1,2],[3,4]]

我想根据改变长度进一步嵌套它如下:

outputlist = [[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3,4],[5,6,7,8]],[[1,2],[3,4]]]

基本逻辑是我希望将列表长度的每个更改分组到一个新的子列表中。这有点难以解释,但我希望上面两个例子说明了我想要做的事情。

如何使用python简单而优雅地实现这一目标?感谢。

2 个答案:

答案 0 :(得分:4)

add_months(date '1972-02-29', 45*12) = '2017-02-28' 

答案 1 :(得分:0)

这是一种方法。

获取所涉及的长度列表:

#solen: set of lengths
solen = set([len(subl) for subl in inputlist])   # portable
solen = {len[subl] for subl in inputlist}        # post Python 2.6

然后构建特定长度的列表列表:

#losubl: list of sublists, one for each item from solen
losubl = [[subl for subl in inputlist if len(subl) == ulen] for ulen in solen]

正如jamylak指出的那样,这种解决方案的效率低于基于itertools的解决方案(多次通过,牺牲了一些订单信息)。 OTOH,如果你没有使用itertools的其他用途,它可能会避免导入。如果您正在使用的列表很复杂,那么使用itertools可能值得额外导入。