将函数应用于嵌套列表:Python

时间:2018-12-22 21:18:48

标签: python

我有一个嵌套列表a = [1, 2, [3, 4], 5],我想应用一个函数,该函数为列表中的每个元素返回*列表,就像这样

a = [1,4, [9,16], 25]

我尝试了此解决方案a = [list(map(lambda x : x * x, x)) for x in a],但出现此错误

  

'int'对象不可迭代

您能告诉我什么意思:

  

'int'对象不可迭代吗?

我们如何解决此问题?如何在嵌套列表上应用函数?

非常感谢您的帮助!

最诚挚的问候,

2 个答案:

答案 0 :(得分:1)

您可能需要一个区分列表和标量的递归函数:

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]

答案 1 :(得分:0)

您正在将列表分解为元素-其中一些是不能与其自身相乘的列表([3,4]*[3,4])。

不确定这是否明智-但您可以使用“递归” lambda:

a =[1, 2, [3, 4], 5]

l = lambda x : x * x if isinstance(x,int) else list(map(l,x))
a = list(map(l, a))

print(a)

输出:

[1, 4, [9, 16], 25]

也可以用于“更深层次”的水平:

a =[1, 2, [3, [7,8], 4], 5]

输出:

[1, 4, [9, [49, 64], 16], 25]

但是如果将不可迭代的东西混入其中会崩溃