Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数应用于任意嵌套列表的每个项_Python - Fatal编程技术网

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。下面是关于如何消除完全不相关的可能的重复的重复链接,但是您的
应用
看起来像是一个有趣的如何/在哪里出现这些事情的链接!