【问题标题】:Generate all permutations of a card deck?生成卡片组的所有排列?
【发布时间】:2017-04-09 08:02:20
【问题描述】:

我有一个按特定顺序包含 52 个元素的卡片组列表

[1,5,10,8,4...]

列表的每个元素都可以放入 5 个可用插槽之一:插槽 1、2、3、4 或 5。 如何生成 5 个插槽的所有可能排列?例如,一个排列是插槽 1 中的所有 52 张卡,另一个是插槽 1 中的第一张卡,插槽 2 中的第二张卡,依此类推。 我一直在考虑使用 itertools 的排列函数,但我不知道如何应用 5 个插槽的概念。

【问题讨论】:

  • 那么,你想把套牌最多分成五个部分吗?你想保持每个部分的顺序吗?零件之间?你必须更具体。首先,您尝试过什么?向我们展示您解决问题的尝试、您的预期输出以及您获得的结果,然后我们可以为您提供帮助!

标签: python permutation


【解决方案1】:

如果我理解正确的话,你的牌组的一个分配可以看作是一个函数,它将牌组中的每个元素映射到数字1,2,3,4,5。鉴于输入总是相同的,它可以表示为52 元素的列表,其中每个元素是15 之间的一个数字,它表明该元素被分配到哪个槽。

itertools 的product 函数可能会对您有所帮助。你可以这样称呼它:

for x in itertools.product((1,2,3,4,5), repeat=52):
    print(x)

但是,生成的元素数量将是5^52=O(10^36)。这是很多元素,您可能永远无法及时完成打印。如果您每秒打印 100 万张,则需要超过 10 亿年才能全部打印完。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    相关资源
    最近更新 更多