在Python中以列表形式返回树的分支

2024-06-01 00:39:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python编写一个递归函数,它以列表的形式返回树的分支,给定分支的深度或最大值。我真的很沮丧。也许有更简单的类或生成器实现?下面是我想要实现的函数行为的详细描述。在

func(data, depth)
'''Accepts a list with numbers > 0 and depth, i.e. max elements per list; 
   returns each branch of a tree'''    

----------Examples--------------
Input:  func([2, 1], depth=2)
Output: [[2, 2], [2, 1], [1, 2], [1, 1]]

Input:  func([3, 2, 1], depth=2)
Output: [[3, 3], [3, 2], [3, 1]
         [2, 3], [2, 2], [2, 1]
         [1, 3], [1, 2], [1, 1]]

Input:  func([2, 1], depth=3)
Output: [[2, 2, 2], [2, 2, 1], [2, 1, 2], [2, 1, 1],
         [1, 2, 2], [1, 2, 1], [1, 1, 2], [1, 1, 1]]

第二个示例的图片

第三个示例的图片

这是我写的代码,它只适用于第一个示例,这太可怕了,我真的很惭愧。/我尝试了很多使用类和生成器的方法,但是我对这些不太熟悉,即使在第一个示例中,代码也只返回了一半的选项。在

^{pr2}$

Tags: 函数代码示例列表inputoutputdata分支
1条回答
网友
1楼 · 发布于 2024-06-01 00:39:21

我不明白你为什么要把这和穿越一棵树联系起来。你的任务基本上就是在一组数字上生成给定长度的所有置换(带替换)-这与具有固定集的笛卡尔积相同。在

在Python中,可以执行以下操作:

import itertools
for i in itertools.product([1,2], repeat=3):
  print i

例如,输出第三个例子。请注意,每个输出都是一个元组,而不是一个列表—因此您可能需要转换它们。在

最简单的实现方式可能是这样的:

^{pr2}$

输出:

111
112
121
122
211
212
221
222

11
12
13
21
22
23
31
32
33

相关问题 更多 >