Python для цикла и списков - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть следующее в коде;который я забыл, где я получил или как он называется (я новичок в Python):

deck = [Card(x, y) for x in cards for y in suits]

Из приведенного выше кода я пытаюсь создать несколько колод в списке, чтобы пользователь вводилколичество колодЯ пытался сделать это так:

decks = 2
i = 0
while i < decks:
    deck = [Card(x, y) for x in cards for y in suits]
    i += 1

Но это просто перезаписывает текущую переменную колоды.Я также попытался:

decks = 2
deck = []
i = 0
while i < decks:
    deck.append(Card(x, y) for x in cards for y in suits)
    i += 1

Но я получаю только <generator object <genexpr> at 0x04562C30> и <generator object <genexpr> at 0x04562BF0> в качестве вывода, когда печатаю содержимое колоды.Как именно я добиваюсь того, что хочу, и как работают два цикла for при создании списка?

Я попробовал следующее, чтобы перебрать членов списка;не работает:

for x in deck:
    for j in x:
        print(str(deck[x][j]))

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Вы должны изменить это,

deck.append(Card(x, y) for x in cards for y in suits)

на это:

deck.append([Card(x, y) for x in cards for y in suits])

Вместо добавления объекта-генератора каждую итерацию понимания списка, как в первой строке,вторая строка хранит данные в списке и , затем добавляет их.

0 голосов
/ 20 ноября 2018

Просто добавление версии понимания для завершения.

decks = 2

deck = [[(x,y) for x in cards for y in suits] for i in range(decks)]
0 голосов
/ 20 ноября 2018

Попробуйте это:

deck.append([Card(x, y) for x in cards for y in suits])

Это будет список списков.но я думаю, что все элементы будут одинаковыми в этом списке.

РЕДАКТИРОВАТЬ:

for x in deck:
    for j in x:
        print(j) # or do what you want, j is that inner element
...