我想编写一个函数,它接受一个列表列表,并返回一个大小相等的列表列表。例如,[[1,2], [0,1], [1,2,3], [0,1,2], [1,2,3,4]]
作为输入,函数应该返回[[[1,2],[0,1]], [[1,2,3],[0,1,2]], [[1,2,3,4]]]
. 我知道最长列表的长度。
我的第一个直觉是为此使用列表推导:
def nestedlenlist(biglist,maxlen):
return [[lists for lists in biglist if len(lists) == n] for n in xrange(0,maxlen)]
我对此有两个抱怨:
- 它在列表上迭代
maxlen
多次,这可能需要更长的列表时间。 - 如果我不知道列表的最大长度怎么办?
一个解决方案可能涉及sorted
:首先对列表进行排序,以便您只需要遍历列表一次,无论何时拆分它biglist[i]
并且biglist[i+1]
大小不同。但是后来我发现自己在循环和搞乱索引,这是您通常希望避免在 Python 中做的事情。
那么最快和最 Pythonic 的方法是什么?