如何在 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
等等……
可以假设项目None
与Empty
相同。
我该怎么做?
【问题讨论】:
这有帮助吗? ***.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 上打印多个字符串数组的每个可能排列?的主要内容,如果未能解决你的问题,请参考以下文章