python - 在循环中附加到列表会重置列表
问题描述
这是我的代码:
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:这不是全部的代码,但我试图让它尽可能清晰易懂
解决方案
您放错了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']
推荐阅读
- javascript - 将 eventListener 添加到 JavaScript 中动态创建的选择框?
- java - 需要关于迭代 Java 列表的建议
- python - Python 3 字典迭代中的性能:dict[key] 与 dict.items()
- c - 为什么clang用-O0(对于这个简单的浮点总和)产生效率低下的asm?
- javascript - 如何在 vue.js 中使用带有复选框的 v-model?
- webrtc - sipjs 0.11.0 的 coturn 或 ice 设置的位置应该在哪里?
- python - `redirect()` 的 NoReverseMatch 与现有的视图方法
- python - 如何使用 pylast 获取最后 4 首听过的曲目?
- mysql - 为什么Mysql在更新查询时返回错误代码1241?
- cuda - CUDA字节原子操作只导致一个线程行动