【发布时间】:2020-09-12 19:19:48
【问题描述】:
首先我使用的是 python。
我有一个名为 tier1 的项目列表,看起来像这样。
tier1 = ['a1','a2,'a3',..,'an']
我有 2 个函数,分别称为 functionA 和 functionZ。
它们都将字符串作为参数并产生这样的列表输出。列表必须在执行期间生成,并且从一开始就不可用。只有 tier1 可用。
listOutput = functionA(tier1[0]).
listOutput 看起来像这样
listOutput = ['b1','b2,'b3',..,'bn']
下次在 listOutput 上使用 functionA 让我们说 item 'b1',它将产生
listOutput = functionA('b1')
output:
listOutput = ['bc1','bc2,'bc3',..,'bcn']
这一次使用 functionA 时,让我们说 'bc1',它可能会出现空,因此使用 functionZ 上的 'bc1' 来代替,并将输出存储在某个地方。
listOutput = functionA('bc1')
输出
listOutput = []
所以我用
listOutput = functionZ('bc1')
输出
listOutput = ['series1','series2','series3',....,'seriesn']
现在我必须回去尝试 bc2,直到 bcn 执行相同的逻辑。完成后,我将在“b2”上使用函数 A。等等。
每个项目的深度是可变的。
看起来像这样
只要 listOutput 不为空,就必须对 listOutput 项或 tier1 项使用 functionA,直到它为空。然后 functionZ 必须用于列表中 functionA 为空的任何项目。
在tier1之后,listOutput也将永远是一个列表,也必须一个一个循环,并且必须使用相同的逻辑。
我正在尝试基于此创建一个递归函数,但我被卡住了。
目前为止,
def recursivefunction (idnum): #idnum will be one of the list items from tier1 or the listOutputs produced
listOutput = functionA(idnum)
if not listOutput:
return functionZ(idnum)
else:
return recursivefunction(listOutput)
但是我的函数返回列表,我如何让它们深入到每个列表中,直到使用 functionZ 并且一旦它被用于移动到列表中的下一个项目。
我需要创建一种新的数据结构吗? 我不知道从哪里开始,我应该寻找使用链表创建某种类吗?
【问题讨论】:
-
我真的不清楚您要做什么。如果您提供带有输入和预期输出的minimal reproducible example,这将非常有帮助
-
您是说
functionA将单个字符串作为参数tier1[0]并生成字符串列表作为输出? IE。如果您将functionA应用于所有tier1(这是一个字符串列表),您最终会得到一个字符串列表列表吗? -
每一个都会产生自己的字符串列表是的
-
对于这种情况,
functionA()会返回空字符串。 -
顺便说一句,我已经尝试使用 for 循环来执行此操作,但是一旦它越来越深入,我就无法解释每种情况。
标签: python list algorithm recursion data-structures