您希望根据项目长度对列表进行分类。因此,您可以根据长度进行排序并将它们分组。您可以使用itertools.groupby 对子列表(或任何可迭代对象)进行分组:
>>> l=[[1],[3,4],[5],[6,7,8],[4,0],[2],[5,6,7]]
>>> from itertools import groupby
>>> [list(g) for _,g in groupby(sorted(l,key=len),key=len)]
[[[1], [5], [2]], [[3, 4], [4, 0]], [[6, 7, 8], [5, 6, 7]]]
这里有一些注释:
如果您不想在列表上执行索引或其他操作等操作,则不需要将结果转换为列表(正如我在上面的答案中所做的那样),您可以让结果为作为一个对长列表非常有效的生成器。
-
如果您想在运行时获得更高的性能,您可以使用使用哈希表来存储数据的字典,其中搜索和插入数据的时间为 O(1)。 @junnytony 用defaultdict 提出了一个好方法。你也可以使用dict.setdefault 方法:
d={}
for i in main_list:
d.setdefault(len(i),[]).append(i)
print d.values()