I have a nested list a = [1, 2, [3, 4], 5]
and I want to apply a function that will raise every number to the power of 2. The result will be like this:
a = [1, 4, [9, 16], 25]
I tried a = [list(map(lambda x : x * x, x)) for x in a]
but it gives this error
'int' object is not iterable
How we can fix this issue? How can I apply a function over a nested list?
You probably need a recursive function that distinguishes between lists and scalars:
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]
Incidentally, this approach works for arbitrary-nested lists.
Here's a more general solution:
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]
You are decomposing your list into its elements -some of them are lists which can not be multiplied with itself ([3,4]*[3,4]
).
Not sure if that is smart - but you can use a "recursing" 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)
Output:
[1, 4, [9, 16], 25]
Works also for "deeper" levels:
a =[1, 2, [3, [7,8], 4], 5]
Output:
[1, 4, [9, [49, 64], 16], 25]
but will crash if you mix non-iterables things into the mix
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With