Open In App

Python – Rear shift K in List

Improve
Improve
Like Article
Like
Save
Share
Report

The conventional problem involving the element shifts has been discussed many times earlier, but sometimes we have strict constraints to performing them and knowledge of any possible variation helps. This article talks about one such problem of shifting K’s at end of list, catch here is it checks for just K’s excluding the conventional ‘None’ (False) values. Let’s discuss certain ways in which this can be performed. 

Method #1 : Using list comprehension + isinstance() In this method, we perform the operation of shifting in 2 steps. In 1st step we get all the values that we need to get at the front and at the end we just push the K’s to end. The isinstance method is used to filter out the Boolean False entity. 

Python3




# Python3 code to demonstrate
# Rear shift K in List
# using list comprehension + isinstance()
 
# initializing list
test_list = [1, 4, None, "Manjeet", False, 4, False, 4, "Nikhil"]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing K
K = 4
 
# using list comprehension + isinstance()
# Rear shift K in List
temp = [ele for ele in test_list if ele != K and ele or ele is None or isinstance(ele, bool) ]
res = temp + [K] * (len(test_list) - len(temp))
 
# print result
print("The list after shifting K's to end : " + str(res))


Output : 

The original list : [1, 4, None, 'Manjeet', False, 4, False, 4, 'Nikhil']
The list after shifting K's to end : [1, None, 'Manjeet', False, False, 'Nikhil', 4, 4, 4]

Time Complexity: O(n), where n is the length of the input list. This is because we’re using the list comprehension + isinstance() which has a time complexity of O(n) in the worst case.
Auxiliary Space: O(n), as we’re using additional space res other than the input list itself with the same size of input list.

  Method #2 : Using list comprehension + isinstance() + list slicing This method is similar to the above method, the only modification is that to reduce number of steps, list slicing is used to attach the K’s to perform whole task in just 1 step. 

Python3




# Python3 code to demonstrate
# Shift zeroes at end of list
# using list comprehension + isinstance() + list slicing
 
# initializing list
test_list = [1, 4, None, "Manjeet", False, 4, False, 4, "Nikhil"]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing K
K = 4
 
# using list comprehension + isinstance() + list slicing
# Shift zeroes at end of list
res = ([ele for ele in test_list if ele != K and ele or not isinstance(ele, int)
       or isinstance(ele, bool)]
        + [K] * len(test_list))[:len(test_list)]
 
# print result
print("The list after shifting K's to end : " + str(res))


Output : 

The original list : [1, 4, None, 'Manjeet', False, 4, False, 4, 'Nikhil']
The list after shifting K's to end : [1, None, 'Manjeet', False, False, 'Nikhil', 4, 4, 4]

Method#3:using list filtering and list concatenation.

Python3




# Python3 code to demonstrate
# Shift zeroes at end of list
# using list filtering and list concatenation
 
# initializing list
test_list = [1, 4, None, "Manjeet", False, 4, False, 4, "Nikhil"]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing K
K = 4
 
# using list filtering and list concatenation
# Shift zeroes at end of list
res = list(filter(lambda x: x != K, test_list)) + [K] * test_list.count(K)
 
# print result
print("The list after shifting K's to end : " + str(res))
#this code contributed by tvsk


Output

The original list : [1, 4, None, 'Manjeet', False, 4, False, 4, 'Nikhil']
The list after shifting K's to end : [1, None, 'Manjeet', False, False, 'Nikhil', 4, 4, 4]

Time Complexity: O(n)

Auxiliary Space: O(n)

Method #4 using NumPy module:

 

Python3




import numpy as np
 
# initializing list
test_list = [1, 4, None, "Manjeet", False, 4, False, 4, "Nikhil"]
 
# printing original list
print("The original list : " + str(test_list))
 
# initializing K
K = 4
 
temp = np.array(test_list)
mask = np.logical_or(temp == K, np.logical_or(temp is None, np.isin(temp, [False])))
temp = temp[~mask].tolist()
res = temp + [K] * (len(test_list) - len(temp))
 
# print result
print("The list after shifting K's to end : " + str(res))


Output:

The original list : [1, 4, None, 'Manjeet', False, 4, False, 4, 'Nikhil']
The list after shifting K's to end : [1, None, 'Manjeet', 'Nikhil', 4, 4, 4, 4, 4]

Time Complexity: O(n)

Auxiliary Space: O(n)

Method #5: Using a loop

Python3




# initializing list
test_list = [1, 4, None, "Manjeet", False, 4, False, 4, "Nikhil"]
print("The original list : " + str(test_list))
 
# initializing K
K = 4
 
# initialize empty lists
k_list = []
non_k_list = []
 
# loop through each element in the list
for elem in test_list:
    if elem == K:
        k_list.append(elem)
    else:
        non_k_list.append(elem)
 
# concatenate both lists
res = non_k_list + k_list
 
# append K's at the end until the length
# of the list is equal to the original list
while len(res) < len(test_list):
    res.append(K)
 
print("The list after shifting K's to end : " + str(res))


Output

The original list : [1, 4, None, 'Manjeet', False, 4, False, 4, 'Nikhil']
The list after shifting K's to end : [1, None, 'Manjeet', False, False, 'Nikhil', 4, 4, 4]

Time Complexity: O(n)

Auxiliary Space: O(n)



Last Updated : 21 Apr, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads