dim*_*ine 1 python iteration list
我希望将包含48种不同长度的列表拆分为每个项目长度的新列表.我可以做点什么
for item in list:
if len(item) == 1:
len1list.append(item)
if len(item) == 2:
len2list.append(item)
Run Code Online (Sandbox Code Playgroud)
等等,但这需要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]]]
Run Code Online (Sandbox Code Playgroud)
这里有一些注意事项:
如果您不想在列表上执行索引或其他操作等操作,则无需将结果转换为列表(正如我在上面的答案中所做的那样),您可以将结果作为一个非常漂亮的生成器对于长列表非常有效.
如果您希望在运行时获得更高的性能,可以使用使用哈希表的字典来存储其数据,搜索和插入数据的数据中包含O(1).@junnytony提出了一个很好的方法defaultdict.你也可以使用dict.setdefault方法:
d={}
for i in main_list:
d.setdefault(len(i),[]).append(i)
print d.values()
Run Code Online (Sandbox Code Playgroud)