我有一个列表列表,每个内部列表的长度为 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)]
我可以通过几次迭代来做到这一点:
>>> 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
提前知道才能做到这一点吗?