Печать списка списков по вертикали

77
6

У меня есть список списков, который содержит строку, представляющую карты в колоде. Мне нужно распечатать список по вертикали.

stacks = [['4C', 'QD', '9D', 'TD', 'JH', 'JD', '6C', 'AC', '3C', 'TS', 'TH'], ['AH', '2C', 'KD', '8C', '5C', '5H', '2D', '5D', '7C', 'AS', 'AD'], ['3S', 'KH', '3H', 'TC', 'QS', '4D', '7S', '7H', '9C', '4S'], ['JS', '7D', 'KC', 'QH', '6S', '6H', '8H', '8S', 'JC', '5S'], ['KS', '2S', 'QC', '4H', '6D', '9S', '2H', '8D', '3D', '9H']]

Мне нужно распечатать его так:

4C AH 3S JS KS
QD 2C KH 7D 2S

и продолжайте так

спросил(а) 2021-01-25T14:10:54+03:00 4 месяца, 2 недели назад
1
Решение
63

Первые 2 строки длиннее остальных, поэтому вместо сохранения zip() используйте itertools.izip_longest() zip() чтобы сохранить эти данные. Я использовал значение заполнения '' которое используется для пропущенных значений в неравных списках длины.

from itertools import izip_longest

stacks = [['4C', 'QD', '9D', 'TD', 'JH', 'JD', '6C', 'AC', '3C', 'TS', 'TH'], ['AH', '2C', 'KD', '8C', '5C', '5H', '2D', '5D', '7C', 'AS', 'AD'], ['3S', 'KH', '3H', 'TC', 'QS', '4D', '7S', '7H', '9C', '4S'], ['JS', '7D', 'KC', 'QH', '6S', '6H', '8H', '8S', 'JC', '5S'], ['KS', '2S', 'QC', '4H', '6D', '9S', '2H', '8D', '3D', '9H']]

for row in izip_longest(*stacks, fillvalue=''):
print ' '.join(row)

Вывод:

4C AH 3S JS KS
QD 2C KH 7D 2S
9D KD 3H KC QC
TD 8C TC QH 4H
JH 5C QS 6S 6D
JD 5H 4D 6H 9S
6C 2D 7S 8H 2H
AC 5D 7H 8S 8D
3C 7C 9C JC 3D
TS AS 4S 5S 9H
TH AD

Если вы не хотите, чтобы блуждающие пробелы находились на последней строке:

for row in izip_longest(*stacks):
print ' '.join(col for col in row if col is not None)

Вот способ сделать это только с вложенными циклами:

longest = max(len(row) for row in stacks)
for i in range(longest):
for row in stacks:
if i < len(row):
print row[i],
print

ответил(а) 2021-01-25T14:10:54+03:00 4 месяца, 2 недели назад
63

Вы можете использовать zip:

stacks = [['4C', 'QD', '9D', 'TD', 'JH', 'JD', '6C', 'AC', '3C', 'TS', 'TH'], ['AH', '2C', 'KD', '8C', '5C', '5H', '2D', '5D', '7C', 'AS', 'AD'], ['3S', 'KH', '3H', 'TC', 'QS', '4D', '7S', '7H', '9C', '4S'], ['JS', '7D', 'KC', 'QH', '6S', '6H', '8H', '8S', 'JC', '5S'], ['KS', '2S', 'QC', '4H', '6D', '9S', '2H', '8D', '3D', '9H']]
stacks = zip(*stacks)
print stacks

ВЫВОД

[('4C', 'AH', '3S', 'JS', 'KS'), 
('QD', '2C', 'KH', '7D', '2S'),
('9D', 'KD', '3H', 'KC', 'QC'),
('TD', '8C', 'TC', 'QH', '4H'),
('JH', '5C', 'QS', '6S', '6D'),
('JD', '5H', '4D', '6H', '9S'),
('6C', '2D', '7S', '8H', '2H'),
('AC', '5D', '7H', '8S', '8D'),
('3C', '7C', '9C', 'JC', '3D'),
('TS', 'AS', '4S', '5S', '9H')]

ответил(а) 2021-01-25T14:10:54+03:00 4 месяца, 2 недели назад
45

Используйте zip для переноса списков:

for vlist in zip(*stacks):
print ' '.join(vlist)

ответил(а) 2021-01-25T14:10:54+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема