You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:44:11