python lambda if, else & elif with multiple conditions and filter list with conditions in lambda
lambda is an one-liner python functions used to quickly built a function with ease, In this post we would see how to use if-else or multiple conditions to evaluate an expression using lambda functions.
Also, we will see how to filter a list by applying conditions in a loop and filter in lambda function
Lambda if-else & elif with multiple conditions
We can use if-else and elif and multiple conditions using lambda function in Python.
Let’s take an example to understand how to use conditions in lambda
Condition:
we want to assign grade based on the scores obtained in a test, here is a condition for assigning the grades:
if grade > 7:
A+
elif grade >= 5 and grade <= 7:
A
else grade <5:
B
We can write this multiple conditions in lambda as shown below
grade = lambda x: 'A+' if x>7 else 'A' if x>=5 and x<=7 else 'B'
grade(8)
Out: 'A+'
Alternatively, we could also write the above conditions using lambda like as shown below
lambda x : (false,true)[Condition]
grade = lambda score : ((((('Not sure' , 'B')[score < 5]), 'A')[(score>=5 | score<=7)]), 'A+')[score>7]
grade(8)
Out: 'A+'
Conditional Statement in Lambda
We could also evaluate a statement if it’s True or False using Lambda.
Let’s verify if this condition is True or False
if grade > 7 and grade <=10 or grade <=5:
print(True)
Using Lambda:
We can use bitwise operator in lambda to create the condition, Here we want to verify if score is greater than 7 and less than 10 or if it is less than 5 or not
grade = lambda x: ((x>7) & (x<=10))| (x<=5)
grade(12)
Out: False
Lambda else do nothing
We could also write only the if statement without an else like this
A lambda, like any function, must have a return value. Without else does not work because it does not specify what to return if not x>7
f = lambda x: x**3 if (x > 7) else None
lambda filter list with multiple conditions
Filtering lists with lambda will return all the elements of the list that return True for the lambda function
data = [10, 9, 7, 0]
The conditions are joined by and, they return True only if all conditions are True, and if they are joined by or, they return True when the first among them is evaluated to be True
list(filter(lambda x: (x%2==0)&(x>=5), data))
Out: [10]
In this case the only item in list that satisfied the condition is returned
lambda evaluate list with multiple conditions inside a loop
We could also use lambda to loop over a list and evaluate a condition
Let’s define a function with all the conditions that we want to evaluate
def f(grade):
if grade > 7:
return 'A+'
elif grade >= 5 and grade <= 7:
return 'A'
elif grade <5:
return 'B'
else:
return False
data = [10, 9, 7, 0]
Will define a lambda function to map each item in the data list to this function
grade = lambda x: list(map(f, x))
Let’s evaluate the grade for each of the items in the data list
grade(data)
Out: ['A+', 'A+', 'A', 'B']