📜  Python – 列表中的后移 K

📅  最后修改于: 2022-05-13 01:54:46.731000             🧑  作者: Mango

Python – 列表中的后移 K

涉及元素移位的传统问题已在前面多次讨论过,但有时我们在执行它们时有严格的限制,并且了解任何可能的变化都会有所帮助。本文讨论了在列表末尾移动 K 的一个这样的问题,这里要注意的是它只检查 K,不包括常规的“无”(False)值。让我们讨论可以执行此操作的某些方式。

方法 #1:使用列表理解 + isinstance()
在该方法中,我们分两步执行移位操作。在第一步中,我们得到了我们需要在前面得到的所有值,最后我们只是将 K 推到最后。 isinstance 方法用于过滤出 Boolean False 实体。

# 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))
输出 :
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]

方法 #2:使用列表理解 + isinstance() + 列表切片
此方法与上述方法类似,唯一的修改是为了减少步骤数,使用列表切片来附加 K 以仅 1 步执行整个任务。

# 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))
输出 :
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]