У меня есть список списков, так что длина каждого внутреннего списка равна 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
заранее, чтобы выполнить это?