Python Reverse Range in String List (original) (raw)

Last Updated : 23 Apr, 2023

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

test_list = [ "Geeksforgeeks" , "Best" , "Geeks" ]

print ( "The original list : " + str (test_list))

i, j = 1 , 3

res = []

for ele in test_list:

`` res.append(ele[i : j + 1 ])

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

test_list = [ "Geeksforgeeks" , "Best" , "Geeks" ]

print ( "The original list : " + str (test_list))

i, j = 1 , 3

res = list ( map ( lambda x : x[i : j + 1 ], test_list))

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

test_list = [ "Geeksforgeeks" , "Best" , "Geeks" ]

print ( "The original list : " + str (test_list))

i, j = 1 , 3

res = [s[i:j + 1 ] for s in test_list]

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.