Python List Comprehension and Slicing - GeeksforGeeks

21 Jan, 2022
List comprehension is an elegant way to define and create a list in python. We can create lists just like mathematical statements and in one line only. The syntax of list comprehension is easier to grasp. 
A list comprehension generally consists of these parts : 
Output expression,Input sequence,A variable representing a member of the input sequence andAn optional predicate part.
Output expression,
Input sequence,
A variable representing a member of the input sequence and
An optional predicate part.
For example :

lst  =  [x ** 2  for x in range (1, 11)   if  x % 2 == 1] 

here, x ** 2 is output expression, 
      range (1, 11)  is input sequence, 
      x is variable and   
      if x % 2 == 1 is predicate part.
Example 1: 
Python3
# Python program to demonstrate list comprehension in Python    # below list contains square of all odd numbers from # range 1 to 10 odd_square = [x ** 2 for x in range(1, 11) if x % 2 == 1] print (odd_square)    # for understanding, above generation is same as, odd_square = [] for x in range(1, 11):     if x % 2 == 1:         odd_square.append(x**2) print (odd_square)    # below list contains power of 2 from 1 to 8 power_of_2 = [2 ** x for x in range(1, 9)] print (power_of_2)    # below list contains prime and non-prime in range 1 to 50 noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)] primes = [x for x in range(2, 50) if x not in noprimes] print (primes)    # list for lowering the characters print ([x.lower() for x in ["A","B","C"]] )   # list which extracts number string = "my phone number is : 11122 !!"   print("\nExtracted digits") numbers = [x for x in string if x.isdigit()] print (numbers)    # A list of list for multiplication table a = 5table = [[a, b, a * b] for b in range(1, 11)]    print("\nMultiplication Table") for i in table:     print (i)
Output: 
[1, 9, 25, 49, 81]
[1, 9, 25, 49, 81]
[2, 4, 8, 16, 32, 64, 128, 256]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
['a', 'b', 'c']

Extracted digits
['1', '1', '1', '2', '2']

Multiplication Table
[5, 1, 5]
[5, 2, 10]
[5, 3, 15]
[5, 4, 20]
[5, 5, 25]
[5, 6, 30]
[5, 7, 35]
[5, 8, 40]
[5, 9, 45]
[5, 10, 50]
After getting the list, we can get a part of it using python’s slicing operator which has the following syntax: 
[start : stop : steps]  

which means that slicing will start from index start
 will go up to stop in step of steps. 
 Default value of start is 0, stop is last index of list
 and for step it is 1 
So [: stop] will slice list from starting till stop index and [start : ] will slice list from start index till end Negative value of steps shows right to left traversal instead of left to right traversal that is why [: : -1] prints list in reverse order.
Example 2: 
Python3
# Let us first create a list to demonstrate slicing# lst contains all number from 1 to 10lst =list(range(1, 11))print (lst)    #  below list has numbers from 2 to 5lst1_5 = lst[1 : 5]print (lst1_5)    #  below list has numbers from 6 to 8lst5_8 = lst[5 : 8]print (lst5_8)    #  below list has numbers from 2 to 10lst1_ = lst[1 : ]print (lst1_)    #  below list has numbers from 1 to 5lst_5 = lst[: 5]print (lst_5)    #  below list has numbers from 2 to 8 in step 2lst1_8_2 = lst[1 : 8 : 2]print (lst1_8_2)    #  below list has numbers from 10 to 1lst_rev = lst[ : : -1]print (lst_rev)    #  below list has numbers from 10 to 6 in step 2lst_rev_9_5_2 = lst[9 : 4 : -2]print (lst_rev_9_5_2)
Output: 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 3, 4, 5]
[6, 7, 8]
[2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5]
[2, 4, 6, 8]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[10, 8, 6]
We can use the filter function to filter a list based on some condition provided as a lambda expression as the first argument and list as the second argument, an example of which is shown below :
Example 3:  
Python3
import functools   #  filtering odd numberslst = filter(lambda x : x % 2 == 1, range(1, 20))print (list(lst))    #  filtering odd square which are divisible by 5lst = filter(lambda x : x % 5 == 0,       [x ** 2 for x in range(1, 11) if x % 2 == 1])print (list(lst))    #   filtering negative numberslst = filter((lambda x: x < 0), range(-5,5))print (list(lst))    #  implementing max() function, usingprint (functools.reduce(lambda a,b: a if (a > b) else b, [7, 12, 45, 100, 15]))
Output: 
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
[25]
[-5, -4, -3, -2, -1]
100
YouTubeGeeksforGeeks507K subscribersPython Programming Tutorial - Slicing and Splitting | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 4:12•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=i5WNg3UOkQk" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
This article is contributed by Utkarsh Trivedi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
ManasChhabra2
ramalaiguhan
punamsingh628700
amartyaghoshgfg
python-list
python-list-functions
Python
School Programming
python-list
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Install PIP on Windows ?
Enumerate() in Python
Different ways to create Pandas Dataframe
Python String | replace()
*args and **kwargs in Python
Arrays in C/C++
Inheritance in C++
Reverse a string in Java
C++ Classes and Objects
Interfaces in Java