各内部リストの長さが1またはn(n> 1と仮定)になるようなリストのリストがあります。
>>> uneven = [[1], [47, 17, 2, 3], [3], [12, 5, 75, 33]]
リストを転置したいのですが、長いリストを(のようにzip
)切り捨てたり、短いリストをNone
で埋めたりする代わりに、短いリストを独自の特異値で埋めたいと思います。言い換えれば、私は取得したいです:
>>> [(1, 47, 3, 12), (1, 17, 3, 5), (1, 2, 3, 75), (1, 3, 3, 33)]
これは、2、3回繰り返すことで実行できます。
>>> maxlist = len(max(*uneven, key=len))
>>> maxlist
4
>>> from itertools import repeat
>>> uneven2 = [x if len(x) == maxlist else repeat(x[0], maxlist) for x in uneven]
>>> uneven2
[[1, 1, 1, 1], [47, 17, 2, 3], [3, 3, 3, 3], [12, 5, 75, 33]]
>>> zip(*uneven2)
[(1, 47, 3, 12), (1, 17, 3, 5), (1, 2, 3, 75), (1, 3, 3, 33)]
しかし、より良いアプローチはありますか?これを達成するために、私は本当にmaxlist
事前に知る必要がありますか?