Python 将函数应用于任意嵌套列表的每个项
我有一个嵌套列表Python 将函数应用于任意嵌套列表的每个项,python,Python,我有一个嵌套列表a=[1,2,3,4,5],我想应用一个函数,将每个数字提升到2的幂。结果如下: a = [1, 4, [9, 16], 25] 我尝试了a=[list(map(lambda x:x*x,x))来表示a中的x]但是它给出了这个错误 “int”对象不可编辑 我们如何解决这个问题?如何在嵌套列表上应用函数?您可能需要一个区分列表和标量的递归函数: def square(item): if isinstance(item, list): return [sq
a=[1,2,3,4,5]
,我想应用一个函数,将每个数字提升到2的幂。结果如下:
a = [1, 4, [9, 16], 25]
我尝试了a=[list(map(lambda x:x*x,x))来表示a中的x]
但是它给出了这个错误
“int”对象不可编辑
我们如何解决这个问题?如何在嵌套列表上应用函数?您可能需要一个区分列表和标量的递归函数:
def square(item):
if isinstance(item, list):
return [square(x) for x in item]
else:
return item * item
square(a)
#[1, 4, [9, 16], 25]
顺便说一句,这种方法适用于任意嵌套列表
这里有一个更通用的解决方案:
def apply(item, fun):
if isinstance(item, list):
return [apply(x, fun) for x in item]
else:
return fun(item)
apply(a, lambda x: x * x)
#[1, 4, [9, 16], 25]
您正在将列表分解为其元素-其中一些是不能与自身相乘的列表(
[3,4]*[3,4]
)
不确定这是否明智-但您可以使用“递归”lambda:
输出:
[1, 4, [9, 16], 25]
[1, 4, [9, [49, 64], 16], 25]
也适用于“更深”层次: 输出:
[1, 4, [9, 16], 25]
[1, 4, [9, [49, 64], 16], 25]
但是,如果您将不可编辑的内容混合到混合中,则会崩溃您试图将函数应用于每个外部列表项,但其中一些是列表(可以应用),其他是数字(不可以应用)。您可以展平不规则列表,然后应用lambda。下面是关于如何消除完全不相关的可能的重复的重复链接,但是您的
应用
看起来像是一个有趣的如何/在哪里出现这些事情的链接!