我在代码中有以下内容;我忘记了它在哪里或它叫什么(我是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
但这只会覆盖当前的deck变量。我也尝试过:
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]))
答案 0 :(得分:12)
尝试一下:
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
答案 1 :(得分:2)
您应该更改它,
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])
第二行不是将列表理解的每次迭代都附加生成器对象(这是第一行所做的事情),而是将数据存储在列表中,然后然后附加它。
答案 2 :(得分:1)
只是为了完成而添加一个理解版本。
decks = 2
deck = [[(x,y) for x in cards for y in suits] for i in range(decks)]