首页 > 解决方案 > 在循环中附加到列表会重置列表

问题描述

这是我的代码:

deckTypes = []
cardType = ["Spade", "Hearts", "Diamonds", "Clubs"]
cardValues = ["Ace", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]
Values = [[1, 11], 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
for i in cardType:
    for j in cardValues:
        deckTypes.append(str(j) + " of " + str(i))
deck = dict(zip(deckTypes, Values*4))
z = 0
while z < 5:
    card = random.choice(list(deck))
    handValue = deck[card]
    hand = []
    hand.append(card)
    print(hand)
    z += 1

我正在尝试追加到列表hand,但每次循环结束时它都会重置列表。所以我明白了:

['1 of Spade']
['3 of Spade']
['2 of Clubs']
['K of Hearts']
['4 of Spade']

我怎样才能做到这一点?

['1 of Spade', '3 of Spade', '2 of Clubs', 'K of Hearts', '4 of Spade']

PS:这不是全部的代码,但我试图让它尽可能清晰易懂

标签: python

解决方案


您放错了hand.


使用您当前的代码,在每次迭代期间hand设置为:[]

z = 0
while z < 5:
    hand = [] # Executed during each iteration
    hand.append(card)
    print(hand)
    z += 1

因此,在每次迭代之后,您都会得到一个只有 1 个元素的列表:

['1 of Spade']
['3 of Spade']
['2 of Clubs']
['K of Hearts']
['4 of Spade']

相反,您应该hand 在循环之前进行初始化,如下所示:

hand = [] # Executed once, before iterating
z = 0
while z < 5:
    hand.append(card)
    print(hand)
    z += 1

现在,您可以看到元素在每次迭代时都被正确地附加到您的列表中:

['1 of Spade']
['1 of Spade', '3 of Spade']
['1 of Spade', '3 of Spade', '2 of Clubs']
['1 of Spade', '3 of Spade', '2 of Clubs', 'K of Hearts']
['1 of Spade', '3 of Spade', '2 of Clubs', 'K of Hearts', '4 of Spade']

当您退出循环时,hand根据需要包含以下列表:

['1 of Spade', '3 of Spade', '2 of Clubs', 'K of Hearts', '4 of Spade']

推荐阅读