首页 > 解决方案 > 将两个列表的笛卡尔积作为列表列表

问题描述

我是 Python 的初学者。

我一直在努力为我的纸牌创建正确的列表理解。我想在每个“数字索引”具有合适类型的列表中创建四个列表。我将尝试在下面显示。

这就是我要的:

deck = [["1 Hearts, "2H", ..."13H"], ["1 Diamonds", "2D", ..."13D"], [....], [...]]

这就是我所拥有的:

value = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"]
deck_types = ["hearts", "diamonds", "clubs", "spades"]
deck = [[i] + value for i in deck_types]

输出:

我不能发布图片,因为我的声誉低于 10,但我会描述它。

[["hearts", "1", "2", "3"....], ["Diamonds", "1", "2", "3"....], ["Clubs", "1"...], [....]]

如您所见,这并不是我想要的。每种类型都成为每个子列表中的 nr [0]。我的计划是将 .pop() 函数与 random.randint 结合起来进行抽牌。因此,当第一个玩家抽一张牌时,该牌将从牌组中移除。然后第二个玩家将无法抽到同一张牌。然后,当我打印第一张玩家卡时,我希望能够同时看到类型和编号。到目前为止,我只能看到数字。

像这样:

card1 = deck[random.randint(1, 3)].pop(random.randint(2, 13))
card2 = deck[random.randint(1, 3)].pop(random.randint(2, 13))

标签: pythonpython-3.xlistcartesian-product

解决方案


好吧,您只需要多一层列表。

deck = [[x+y for x in value] for y in deck_types]

推荐阅读