【发布时间】:2021-08-19 06:22:54
【问题描述】:
我需要遍历 python 中的嵌套列表,其中列表项是函数调用(列表中的第一项是函数,其余项是该函数的参数)。
这些参数本身也可以是带参数的函数,因此是嵌套的。一个列表也可以包含一个没有参数的函数。
像这样:
['foo','arg1','arg2']
要么:
[['foo','arg1','arg2'],['bar'],['baz','arg1']]
要么:
['foo','arg1',['baz','arg1']]
等等。
这是一个使用虚构 sum 和 product 函数的示例... Sum 相加,Product 相乘;如果我们评估函数,我们会得到 10。
['sum',['product',2,3],4]
我可以将函数和参数传递给另一个函数,该函数对我的安全函数进行实际“调用”,但实际上递归迭代列表时遇到了麻烦。 这是一个悲伤的尝试:
def process_list(l):
if isinstance(l,list):
results = []
for item in l:
if isinstance(item,list):
func = item[0]
args = item[1:]
for idx, arg in enumerate(args):
if isinstance(arg,list):
args[idx] = process_list(arg)
results.append(function_caller_result(func,args)) #what if that's a list?
else:
results.append(item)
return results
return l
这里的任何帮助将不胜感激!提前致谢! :)
【问题讨论】:
-
[['foo','arg1','arg2'],['bar'],['baz','arg1']]输出会是什么?foo会返回(假设)1、bar会返回2、baz会返回3,所以你会期望[1, 2, 3]?第二个和第三个参数现在没有可以传递给它们的函数,在任何情况下,如果列表或嵌套列表中的第一个元素不是函数,它将导致像我解释的那样的情况,希望我说清楚了,例如:[['foo', 1, 2], [['foo' ,1, 2], 1, 2], [['foo' ,1, 2], 1, 2]]
标签: python recursion nested-loops nested-lists