リストのリストを受け取り、同じサイズのリストのリストのリストを返す関数を書きたいと思います。たとえば、[[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)]
これには 2 つの不満があります。
- リストを何度も繰り返し
maxlen
ますが、長いリストでは時間がかかる場合があります。 - リストの最大長がわからない場合はどうすればよいですか?
解決策には次のようなものがありsorted
ます。最初にリストを並べ替えて、リストを一度だけ調べて、いつでもサイズが異なるようbiglist[i]
に分割します。biglist[i+1]
しかし、その後、ループしてインデックスをいじっていることに気付きます。これは、通常、Python では避けたいことです。
では、これを行うための最速かつ最も Pythonic な方法は何ですか?