In this tutorial I'm going to cover:
1. What is List Comprehension?
2. Advantages of List Comprehension.
3. How to understand and write efficient List Comprehension (we will mostly focus here).
1.What is List Comprehension?
List Comprehension is a one-liner syntax in python that is used to generate a list (from another iterable object like list, set, dict, etc., or a sequence) in a more efficient and faster manner than the traditional for loop.
2.Advantages of List Comprehension.
> Saves multiple lines of code.
> Faster than traditional for loop.
> Simplifies the codebase.
3.How to understand and write efficient List Comprehension.
-List Comprehension opens and closes with square brackets "" (a list as an output).
-Inside the square bracket there are 2 parts:
2. Sequence of for's and if's.
Let understand both parts.
If you see it in the image. you can see that Expression is nothing but the area 1 where x is.
In the above example, we are not performing any activity on the elements of the list, we are just returning as it is.
Let's see what we can do here.
quantity = [100,120,90,70,110] # let's say we want to add/substract/divide/multiply some value to each element of quantity list. print([x+5 for x in quantity]) print([x*5 for x in quantity]) print([x-5 for x in quantity]) print([x/5 for x in quantity])
[105, 125, 95, 75, 115]
[500, 600, 450, 350, 550]
[95, 115, 85, 65, 105]
[20.0, 24.0, 18.0, 14.0, 22.0]
Not just arithmetic operations but we can all sorts of one-liner operations here on each element.
now let's come to the second part of the List Comprehension.
- it can have multiple for and if conditions
- for is used to iterate through given iterable objects.
temp_list=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] print([x for x in temp_list if x>10])
here for x in temp_list is used to iterate through the temp_list.
- if is used to filter the items from the original iterable object mentioned in the for statement.
[11, 12, 13, 14, 15, 16, 17, 18, 19]
here if x>10 is the condition and it returns the element of the list only if the condition is satisfied.
- we can also have nested List Comprehension.
suppose we have a list of lists.
and we want to perform some operation (say, converting to upper case) on each element of the inner list.
for idx,item in enumerate(a): for s_idx,sub_item in item: a[idx][s_idx]=sub_item.upper()
using List Comprehension:
a=[[subitem.upper() for subitem in item] for item in a]
[['A', 'B', 'C'], ['X', 'Z'], ['Q', 'W', 'E']]
Here are some more examples for you to explore:
# we can perform all sorts of operations here: # few examples on the list of strings: # let's say you have a name list. names=[' Amit','ameet ',''] # suppose you want to clean(remove extra spaces) the list, convert to title case (first letter of each word as capital), and remove empty strings. # traditionally you would create a new list. temp_list= # loop over the original list. for an item in names: # check if string is not empty if item.strip(): ''' 1.Remove extra spaces. 2.Convert to title case. 3.append to a temporary list. ''' temp_list.append(item.strip().title()) # updated back the original list. names=temp_list print(names) # Now let's see how we can do all of these in using list comp. # Approach 1: # create a function that takes a string and performs some operation. def complex_ops(item): ''' 1.Remove extra spaces. 2.Convert to title case. 3.return the string ''' item=item.strip() item=item.title() return item names=[' Amit','ameet ',''] # now call the function for each element in the list which is not empty names=[complex_ops(x) for x in names if x.strip()] print(names) # Approach 2: # Do everything in the list comp. names=[' Amit','ameet ',''] names=[x.strip().title() for x in names if x.strip()] print(names)