Python - Reverse Range in String List
Given a string list, reverse each element of string list from ith to jth index.
Input : test_list = ["Geeksforgeeks", "Best", "Geeks"], i, j = 1, 2 Output : ['ee', 'es', 'ee'] Explanation : Range of strings are extracted. Input : test_list = ["Geeksforgeeks"], i, j = 1, 7 Output : ['eeksfor'] Explanation : Single string, from e to r (7 elements) are sliced.
Method #1 : Using loop + reversed() + string slicing
The combination of above methods can be used to solve this problem. In this, we perform reverse of range using reversed() extracted using slicing.
# Python3 code to demonstrate working of
# Common list elements and dictionary values
# Using set() and intersection()
# initializing list
test_list = ["Geeksforgeeks", "Best", "Geeks"]
# printing original list
print("The original list : " + str(test_list))
# initializing range
i, j = 1, 3
res = []
for ele in test_list:
# slicing and appending range
res.append(ele[i : j + 1])
# printing result
print("Sliced strings : " + str(res))
Output
The original list : ['Geeksforgeeks', 'Best', 'Geeks'] Sliced strings : ['eek', 'est', 'eek']
Time Complexity: O(n*n) where n is the number of elements in the list “test_list”.
Auxiliary Space: O(n) where n is the number of elements in the list “test_list”.
Method #2 : Using map() + slicing + lambda
This is yet another way in which this task can be performed. In this, we use map() to extend the logic of slice made using lambda to entire list.
# Python3 code to demonstrate working of
# Common list elements and dictionary values
# Using map() + slicing + lambda
# initializing list
test_list = ["Geeksforgeeks", "Best", "Geeks"]
# printing original list
print("The original list : " + str(test_list))
# initializing range
i, j = 1, 3
# map used to extend logic to each string
res = list(map(lambda x : x[i : j + 1], test_list))
# printing result
print("Sliced strings : " + str(res))
Output
The original list : ['Geeksforgeeks', 'Best', 'Geeks'] Sliced strings : ['eek', 'est', 'eek']
The Time and Space Complexity for all the methods are the same:
Time Complexity: O(n)
Space Complexity: O(n)
Method 3 : using list comprehension,
Initialize the list of strings test_list.
Initialize the values of i and j to slice each string in the list.
Use a list comprehension to extract the slice from each string in test_list.
Store the extracted slices in a new list res.
Print the original list and the sliced strings.
# Python3 code to demonstrate working of
# Common list elements and dictionary values
# Using list comprehension and string slicing
# initializing list
test_list = ["Geeksforgeeks", "Best", "Geeks"]
# printing original list
print("The original list : " + str(test_list))
# initializing range
i, j = 1, 3
# using list comprehension to slice each string
res = [s[i:j+1] for s in test_list]
# printing result
print("Sliced strings : " + str(res))
Output
The original list : ['Geeksforgeeks', 'Best', 'Geeks'] Sliced strings : ['eek', 'est', 'eek']
The time complexity of this approach is O(n), where n is the length of the list test_list, because we are iterating through each string in the list once.
The auxiliary space complexity is also O(n), because we are storing the extracted slices in a new list.