What is list comprehension?
Python is an object oriented programming language. Almost everything in them is treated consistently as an object. Python also features functional programming which is very similar to mathematical way of approaching problem where you assign inputs in a function and you get the same output with same input value. Given a function
f(x) = x2, f(x) will always return the same result with the same x value. The function has no "side-effect" which means an operation has no effect on a variable/object that is outside the intended usage. "Side-effect" refers to leaks in your code which can modify a mutable data structure or variable.
Functional programming is also good for parallel computing as there is no shared data or access to the same variable.
List comprehension is a part of functional programming which provides a crisp way to create lists without writing a for loop.
In the image above, the
for clause iterates through each item of list.
if clause filters list and returns only those items where filter condition meets. if clause is optional so you can ignore it if you don’t have conditional statement.
[i**3 for i in [1,2,3,4] if i>2] means take item one by one from list [1,2,3,4] iteratively and then check if it is greater than 2. If yes, it takes cube of it. Otherwise ignore the value if it is less than or equal to 2. Later it creates a list of cube of values 3 and 4.
Output : [27, 64]
List Comprehension vs. For Loop vs. Lambda + map()
All these three have different programming styles of iterating through each element of list but they serve the same purpose or return the same output. There are some differences between them as shown below.
[i**2 for i in range(2,10)]
sqr = 
for i in range(2,10):
list(map(lambda i: i**2, range(2, 10)))
[4, 9, 16, 25, 36, 49, 64, 81]
List comprehension is performing a loop operation and then combines items to a list in just a single line of code. It is more understandable and clearer than for loop and lambda.
range(2,10) returns 2 through 9 (excluding 10).
**2 refers to square (number raised to power of 2).
sqr =  creates empty list.
append( ) function stores output of each repetition of sequence (i.e. square value) in for loop.
map( ) applies the lambda function to each item of iterable (list). Wrap it in
list( ) to generate list as output