2014-10-01 2 views
0

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

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 

и продолжать в том же духе, что

+0

Я пробовал вложенные циклы и распечатает список, но e все будет на новой строке, поэтому после того, как первый список будет полностью распечатан, он распечатает следующий список прямо под ним. Мне нужно, чтобы он печатался рядом с ним. – Liam87

ответ

0

Использование почтового индекса для транспонирования списка:

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

Спасибо, что сработало, однако, если в одном списке есть еще одна строка, он отключит последнюю строку. – Liam87

+0

Использовать izip_longest, как предложил @mhawke – happydave

0

Вы можете использовать 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')] 
1

Первые 2 строки больше, чем остальные, поэтому использовать 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 
+0

Я получаю сообщение ImportError, что я не могу импортировать izip_longest, это что-то, что мне нужно скачать отдельно? Знаете ли вы, как получить тот же результат, но с петлями? – Liam87

+0

izip_longest находится в itertools - это стандартный пакет. Какую версию Python вы используете? – mhawke

+0

версия 3.3.4 Python in Wing IDE – Liam87

Смежные вопросы