У меня есть список списков строк, подобных этому:конкатенации столбцов в двумерном массиве
arr = [['a', 'b', 'c'],
['X', 'Y', 'Z'],
['1', '2', '3'],
]
, который нужно преобразовать в список каскадных «столбцов», то есть:
['aX1', 'bY2', 'cZ3']
я придумал решение вращая весь массив 90 градусов по часовой стрелке, а затем соединением всех элементов в каждой строки в обратном порядке:
[''.join(reversed(row)) for row in zip(*reversed(arr))]
Это работает до тех пор, пока каждая строка имеет одинаковое количество элементов. Что делать, если это не так. Скажем, у меня есть массив как это:
arr = [['a', 'b', 'c', 'd'],
['X', 'Y'],
['1', '2', '3'],
]
и что я ожидаю:
['aX1', 'bY2', 'c3', 'd']
я мог подушечка короткие строки с пустой строкой элементов перед использованием раствора выше:
max_item_count = max(len(row) for row in arr)
arr = [row + [''] * (max_item_count - len(row)) for row in arr]
Но, конечно, есть лучший способ?
['itertools.zip_longest'] (https://docs.python.org/3/library/itertools.html#itertools.zip_longest)? – jonrsharpe