我有一个嵌套列表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'对象不可迭代吗?
我们如何解决此问题?如何在嵌套列表上应用函数?
非常感谢您的帮助!
最诚挚的问候,
答案 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]
但是如果将不可迭代的东西混入其中会崩溃