Skip to main content
 首页 » 编程设计

python之根据项目的长度制作子列表

2025年05月04日13zengkefu

我想将我有 48 种不同长度的列表拆分为每个项目长度的新列表。我可以做类似的事情

for item in list: 
    if len(item) == 1: 
         len1list.append(item) 
    if len(item) == 2: 
         len2list.append(item) 

等等,但这需要 48 个 if 语句,只是想知道是否有更 Pythonic 的方式,使用更少的代码行。

请您参考如下方法:

您想根据项目长度对列表进行分类。所以你可以根据长度排序并将它们分组。你可以使用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()