如何在 Python 上打印多个字符串数组的每个可能排列?

Posted

技术标签:

【中文标题】如何在 Python 上打印多个字符串数组的每个可能排列?【英文标题】:How to print each possible permutation of several arrays of strings on Python? 【发布时间】:2022-01-21 08:15:24 【问题描述】:

假设我有以下字符串数组:

Background = "Ocean"
Body = "Normal"
Eyes = "Big", "Small", "Monolid"
Color = "Yellow", "White", "Red Rose", "Turquoise", "Dark green", "Orange"
Hands = "None", "Robot", "Spider", "Bear"
Extra = "Empty", "Sand", "Dust", "Graffiti", "Aloe"

我想打印一个列表,其中包含上述数组中提到的每个元素的所有可能排列,按照这些数组的设置顺序(即它开始检查Background,然后检查Body,然后是Eyes,然后是Color,然后是Hands,最后是Extra)。

第一个排列应该是:

1. Ocean, Normal, Big, Yellow, None, Empty

第二个排列应该是:

2. Ocean, Normal, Big, Yellow, None, Sand

等等……

可以假设项目NoneEmpty相同。

我该怎么做?

【问题讨论】:

这有帮助吗? ***.com/a/2535934/8739330 @West 我认为这个解决方案也可以,但我不知道在那行代码中我可以在哪里设置一个计数器i,另外,你知道是否有我可以使用的公式检查i 的最终数量是否真的是这种情况下的排列总数? 看到您对已接受答案的评论。 i 在这种情况下肯定是排列的总数。对于我建议的解决方案,您可以获取结果列表的长度并将其与您接受的答案中的最终i 进行比较。如果它们相同,则您可以使用最快的选项。 @West 谢谢。另外,我刚刚意识到,通过将每个数组中的每个元素数相乘,你最终得到了排列的总数,即 1x1x3x6x4x5 = 360 哦,太好了,我没想到 【参考方案1】:

以下解决方案应该有效 假设数组如下

Backgrounds = ["Ocean"]
Bodys = ["Normal"]
Eyes = ["Big", "Small", "Monolid"]
Colors = ["Yellow", "White", "Red Rose", "Turquoise", "Dark green", "Orange"]
Hands = ["None", "Robot", "Spider", "Bear"]
Extra = ["Empty", "Sand", "Dust", "Graffiti", "Aloe"]
for background in Backgrounds:
    for body in Bodys:
       for eye in Eyes:
           for colour in colours:
                 for hand in Hands:
                      for extra in extras:
                             print(background,body,eye,colour,hand,extra)

如果您的列表真的很大,请不要使用上述解决方案,因为它的时间复杂度是 o(n^6)。

【讨论】:

酷,我认为它有效,我还在第一个 for 循环之前添加了i = 0,在print(i,background,body,eye,colour,hand,extra) 之前添加了i +=1,计数器上升到 360,有没有公式我可以用于评估这个排列总数(即 360)是否真的适合这种情况? i+=1 应该在 print 语句之后。如果您只希望前 360 个输出,请在 for 循环中添加一个 break 语句。如果您想要第 360 个输出,则不需要 forloops。另外,如果有效,请接受答案

以上是关于如何在 Python 上打印多个字符串数组的每个可能排列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中打印二维对象数组? [复制]

如何在没有行终止符的情况下快速打印字符数组

如何将字符串中的多个数字转换为整数

如何使用 Python 制作时间表的图像/PDF

python如何打印输出

如何在每个打印页面上打印 GridView 的标题