Given a list of lists, write a Python program to extract the last element of each sublist in the given list of lists.
Examples:
Input : [[1, 2, 3], [4, 5], [6, 7, 8, 9]] Output : [3, 5, 9] Input : [['x', 'y', 'z'], ['m'], ['a', 'b'], ['u', 'v']] Output : ['z', 'm', 'b', 'v']
Approach #1 : List comprehension
Python3
# Python3 program to extract first and last # element of each sublist in a list of lists def Extract(lst): return [item[ - 1 ] for item in lst] # Driver code lst = [[ 1 , 2 , 3 ], [ 4 , 5 ], [ 6 , 7 , 8 , 9 ]] print (Extract(lst)) |
[3, 5, 9]
Time complexity: O(n), where n is the total number of elements in all sublists.
Auxiliary space: O(n), as the program creates a new list to store the extracted last elements of each sublist.
Approach #2 : Using zip and unpacking(*) operator This method uses zip with * or unpacking operator which passes all the items inside the ‘lst’ as arguments to zip function. There is a little trick with extracting last item of list, Instead of using direct zip, use the reversed list iterators.
Python3
# Python3 program to extract first and last # element of each sublist in a list of lists def Extract(lst): return list ( zip ( * [ reversed (el) for el in lst]))[ 0 ] # Driver code lst = [[ 1 , 2 , 3 ], [ 4 , 5 ], [ 6 , 7 , 8 , 9 ]] print (Extract(lst)) |
(3, 5, 9)
Time Complexity: O(N)
Auxiliary Space: O(1)
Another way of using zip is to use it with Python map, passing reversed as function.
Python3
def Extract(lst): return list ( list ( zip ( * map ( reversed , lst)))[ 0 ]) |
Time Complexity: O(NlogN)
Auxiliary Space: O(N)
Approach #3 : Using itemgetter()
Python3
# Python3 program to extract first and last # element of each sublist in a list of lists from operator import itemgetter def Extract(lst): return list ( map (itemgetter( - 1 ), lst )) # Driver code lst = [[ 1 , 2 , 3 ], [ 4 , 5 ], [ 6 , 7 , 8 , 9 ]] print (Extract(lst)) |
[3, 5, 9]
Time Complexity: O(NlogN)
Auxiliary Space: O(N)
Approach #4 : Using len() method and indexing
Python3
# Python3 program to extract last # element of each sublist in a list of lists def Extract(lst): res = [] for i in lst: res.append(i[ len (i) - 1 ]) return res # Driver code lst = [[ 1 , 2 , 3 ], [ 4 , 5 ], [ 6 , 7 , 8 , 9 ]] print (Extract(lst)) |
[3, 5, 9]
Time Complexity: O(N)
Auxiliary Space: O(N)
Approach #5: Using the map() function and lambda expression
You could use the map() function and indexing to extract the last element of each sublist in a single line of code. For example:
Python3
# Python3 program to extract last # element of each sublist in a list of lists def Extract(lst): return list ( map ( lambda x: x[ - 1 ], lst)) # Driver code lst = [[ 1 , 2 , 3 ], [ 4 , 5 ], [ 6 , 7 , 8 , 9 ]] print (Extract(lst)) |
[3, 5, 9]
Time complexity: O(N), where N is the total number of sublists in the list.
Auxiliary space: O(N), where N is the total number of sublists in the list.