l = [['Something', 'Something else', 'Another thing'],
['Other things', 'More data', 'Element'],
['Stuff', 'data', 'etc']]
sub1 = [
[s.ljust(max(len(i) for i in column)) for s in column]
for column in zip(*l)]
for p in [" ".join(row) for row in zip(*sub1)]: print p
Здесь сначала список преобразуется с помощью zip(*l)
: каждый из подсписков передается в качестве собственного аргумента zip()
.Результатом является список, который объединяет n-ые записи каждого старого списка, поэтому вы получаете [['Something', 'Other things', 'Stuff'], ['Something else', 'More data', 'data'], ...]
.
Тогда записи, длина которых должна совпадать, находятся в том же column
.В каждом из этих column
s строки ljust()
редактируются до наибольшей длины в группе.
После этого новый список с настроенными длинами снова преобразуется - так же, как и выше -и компоненты, соединенные между собой " "
.
Полученный 1D список затем печатается запись за записью.