Вероятно, есть лучшие способы сделать это. numpy
вероятно будет более производительным для манипулирования массивами.
Но вот один из способов нормализовать длину списка списков с помощью zip_longest()
. Это повлечет за собой итерацию по всему набору данных, поскольку элементы списка проходят через два уровня итераторов zip.
>>> from itertools import zip_longest
>>>
>>> rows = [[random.randint(100, 999)
... for _ in range(random.randint(5, 10))]
... for _ in range(10)]
...
>>> for row in rows:
... print(row)
...
[826, 735, 223, 394, 885, 122, 259, 899, 788, 121]
[984, 405, 185, 984, 727, 901, 704, 526, 936]
[617, 814, 801, 382, 138, 245, 225]
[314, 478, 103, 509, 559, 687, 124, 869, 596]
[982, 741, 714, 489, 613, 392, 940, 577, 155]
[752, 262, 365, 213, 451, 925, 610]
[555, 288, 277, 975, 573]
[507, 753, 537, 721, 629]
[235, 971, 970, 721, 571]
[367, 627, 335, 955, 410, 393, 387, 935, 793]
>>>
>>> padded_rows = [list(row) for row in zip(*zip_longest(*rows, fillvalue='#'))]
>>> for row in padded_rows:
... print(row)
...
[826, 735, 223, 394, 885, 122, 259, 899, 788, 121]
[984, 405, 185, 984, 727, 901, 704, 526, 936, '#']
[617, 814, 801, 382, 138, 245, 225, '#', '#', '#']
[314, 478, 103, 509, 559, 687, 124, 869, 596, '#']
[982, 741, 714, 489, 613, 392, 940, 577, 155, '#']
[752, 262, 365, 213, 451, 925, 610, '#', '#', '#']
[555, 288, 277, 975, 573, '#', '#', '#', '#', '#']
[507, 753, 537, 721, 629, '#', '#', '#', '#', '#']
[235, 971, 970, 721, 571, '#', '#', '#', '#', '#']
[367, 627, 335, 955, 410, 393, 387, 935, 793, '#']
>>>
Не уверен, что означает подделка данных. Этот подход просто копирует ссылки на данные из списка в список, поэтому он не выполняет никаких операций над самими данными.