Python for循环和列表

时间:2018-11-20 12:35:28

标签: python list list-comprehension

我在代码中有以下内容;我忘记了它在哪里或它叫什么(我是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]))

3 个答案:

答案 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)]