【发布时间】:2021-12-19 16:16:09
【问题描述】:
我正在编写一些代码以从列表中生成所有可能的排列。此类产品仅限于一种特定尺寸。我的代码适用于常规排列,但我不知道如何获得遵循这种逻辑的排列。我应该得到遵循这种纵横交错模式的所有排列,其中第一个元素后面跟着另一个元素,然后重复直到产品达到大小 z,进入一个大数组。
例如,给定一个像 [0,1,2,3] 和 z=3 这样的数组,
应该返回类似[[0,1,0][1,0,1][2,0,2][0,2,0][0,3,0][0,4,0]...]
当然,输出会根据 z 变化,所以,如果我们有 z=4,则数组将有大小为 4 的子数组,如 [[0,1,0,1],[1,0,1,0],[2,0,2,0],[0,2,0,2], etc.]
从根本上说,您只需要交替原始数组中的两个元素,以便它们形成那种类型的 a-b/a-b-a/a-b-a-b/模式,因此一次取两个元素。
这是我的 z 大小的基本排列代码。
def comb(k,array):
if k<=0:
return [[]]
else:
final=[]
for part in comb(k-1,array):
for e in array:
final.append([e]+part)
return final
我不想使用任何库,因为我正在专门研究递归,这在学习方面是毫无意义的。谢谢。
【问题讨论】:
-
笛卡尔积和排列是非常不同的东西。这就像问一个数学问题,但使用“加法”和“乘法”这两个词可以互换。老实说,我不知道您希望结果列表是什么样的。您能否提供一些可以更好地表达您的意图的示例输入和输出?
-
你是对的。我的意思是排列,而不是笛卡尔积。示例中提供了输入:)