J'ai ce qui suit dans le code; dont j'ai oublié où je l'ai eu ou comment ça s'appelle (je suis nouveau sur Python):

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

À partir du code ci-dessus, j'essaie de créer plusieurs ponts dans une liste, afin que l'utilisateur saisisse le nombre de ponts. J'ai essayé de le faire comme ceci:

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

Mais cela écrase simplement la variable de deck actuelle. J'ai aussi essayé:

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

Mais j'obtiens uniquement <generator object <genexpr> at 0x04562C30> et <generator object <genexpr> at 0x04562BF0> en sortie lorsque j'imprime le contenu du jeu. Comment puis-je obtenir exactement ce que je veux et comment fonctionnent les deux boucles pour la création de la liste?

J'ai essayé ce qui suit pour parcourir les membres de la liste; ne fonctionne pas:

for x in deck:
    for j in x:
        print(str(deck[x][j]))
0
EInherjar 20 nov. 2018 à 15:35

3 réponses

Meilleure réponse

Essaye ça:

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

Ce sera une liste de listes. mais je pense que tous les éléments seront les mêmes dans cette liste.

ÉDITER:

for x in deck:
    for j in x:
        print(j) # or do what you want, j is that inner element
12
Mehrdad Pedramfar 20 nov. 2018 à 13:08

Vous devriez changer cela,

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

En cela:

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

Au lieu d'ajouter un objet générateur à chaque itération de la compréhension de la liste, ce que fait la première ligne, la deuxième ligne stocke les données dans une liste et puis les ajoute.

2
Arnav Borborah 20 nov. 2018 à 12:39

Il suffit d'ajouter une version de compréhension pour le plaisir de terminer.

decks = 2

deck = [[(x,y) for x in cards for y in suits] for i in range(decks)]
1
Rahul Chawla 20 nov. 2018 à 13:52