How to map a lambda function to variable that can be a float, int, or list

Question:

I’m trying to map a lambda function to variable that can be a float, int, or list.

Test #1, this works:

val = [0.1]
test =  list(map(lambda x: max(x, 1 - x), val))

Test #2, this throws TypeError: 'float' object is not iterable:

val = 0.1
test =  list(map(lambda x: max(x, 1 - x), val))

I tried to solve it with list(val) (that is, list(map(lambda x: max(x, 1 - x), list(val)))), but it throws the same error.

How can I get it to work in both Test #1 and Test #2? Python 3.7

Asked By: a11

||

Answers:

You get the error, because in Test #2 val variable is not iterable (because it’s a float value), so map() function has no object to iterate through.

The map() function applies a given function to each item of an iterable (list, tuple etc.) and returns an iterator.

Update:

Here is the solution working for both Tests:

val = 0.1
test =  list(map(lambda x: max(x, 1 - x), [val] if type(val) != list else val))

If the type of val variable is not a list, then we convert it to be a list; otherwise, we leave the val variable without conversion.

Alternatively, you can do it like that (for Test #2):

val = 0.1
test =  list(map(lambda x: max(x, 1 - x), [val]))
Answered By: doxdeveloper

You can handle this case using if condition inside your map function. Try like this:

val = 0.1
test = list(map(lambda x: max(x, 1 - x), val if isinstance(val, list) else [val]))

it will handle your all cases like list, int and decimal.

Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.