使用random.sample生成三维数组问题求助:需生成二维数组且必须用sample
问题解决:使用random.sample生成二维列表而非三维列表
嘿,我明白你的问题啦!你现在得到三维列表的原因很简单:random.sample(deck, 1)返回的是一个包含单个元素的列表,而你把这个列表直接append到player1和pc里,自然就多了一层嵌套,变成了[[[元素]]]这样的三维结构。
解决方案
这里有两种可行的修改方式,都能帮你得到想要的二维列表:
方式1:提取sample结果的单个元素
每次调用random.sample(deck, 1)后,取返回列表的第0个元素(也就是你实际想要的那张牌),再append到目标列表中:
import random suits =['H', 'D', 'S', 'C'] numbers = [] deck = [] for i in range(0, 13): numbers.append(i+2) for i in range(len(suits)): for j in range(len(numbers)): deck.append([numbers[j], suits[i]]) player1 = [] pc = [] for i in range(5): # 取sample返回列表的第一个元素,去掉多余嵌套 player1.append(random.sample(deck, 1)[0]) pc.append(random.sample(deck, 1)[0]) print(player1, pc)
方式2:一次性抽取5个元素(更推荐)
其实random.sample支持直接指定抽取的数量,不用写循环,这样代码更简洁高效:
import random suits =['H', 'D', 'S', 'C'] numbers = [] deck = [] for i in range(0, 13): numbers.append(i+2) for i in range(len(suits)): for j in range(len(numbers)): deck.append([numbers[j], suits[i]]) # 直接抽取5个元素,一步到位 player1 = random.sample(deck, 5) pc = random.sample(deck, 5) print(player1, pc)
两种方式都能得到类似这样的二维列表输出:
[[14, 'C'], [11, 'D'], [6, 'C'], [14, 'S'], [13, 'H']] [[2, 'C'], [6, 'D'], [11, 'C'], [6, 'D'], [9, 'S']]
内容的提问来源于stack exchange,提问作者Toxicone 7
相关产品推荐
相关产品推荐

