Python旋转列表的方式

2021年4月29日18:14:23 发表评论 1,428 次浏览

列表的轮换也已在前面讨论过, 但是这篇特定的文章集中于速记和各种短技巧, 以单行或一个单词实现。此操作对于程序员完成各种任务至关重要。

让我们讨论一下轮换列表的不同方法。

方法1:使用切片

这种特定的方法是通用方法, 通常用于完成此任务, 并且在许多文章中也进行了讨论。给定转数, 只需将后面的切片部分与初始切片的部分连接即可。

# Python3 code to demonstrate 
# rotation of list 
# using slice 
  
# initializing list
test_list = [ 1 , 4 , 6 , 7 , 2 ]
  
# printing original list 
print ( "Original list : " + str (test_list))
  
# using slicing to left rotate by 3
test_list = test_list[ 3 :] + test_list[: 3 ]
  
# Printing list after left rotate
print ( "List after left rotate by 3 : " + str (test_list))
  
# using slicing to right rotate by 3
# back to Original
test_list = test_list[ - 3 :] + test_list[: - 3 ]
  
# Printing after right rotate
print ( "List after right rotate by 3(back to original) : "
                                          + str (test_list))

输出如下:

Original list : [1, 4, 6, 7, 2]
List after left rotate by 3 : [7, 2, 1, 4, 6]
List after right rotate by 3 ( back to original) : [1, 4, 6, 7, 2]

方法2:使用列表理解

这个问题也可以通过幼稚的方法解决, 但是它的较短实现将借助于列表理解。在这种方法中, 我们只需要在旋转后将索引分配给每个值到特定位置。

# Python3 code to demonstrate 
# rotation of list 
# using list comprehension
  
# initializing list
test_list = [ 1 , 4 , 6 , 7 , 2 ]
  
# printing original list 
print ( "Original list : " + str (test_list))
  
# using list comprehension to left rotate by 3
test_list = [test_list[(i + 3 ) % len (test_list)]
                for i, x in enumerate (test_list)]
  
# Printing list after left rotate
print ( "List after left rotate by 3 : " + str (test_list))
  
# using list comprehension to right rotate by 3
# back to Original
test_list = [test_list[(i - 3 ) % len (test_list)]
                for i, x in enumerate (test_list)]
  
# Printing after right rotate
print ( "List after right rotate by 3(back to original) : " 
                                         + str (test_list))

输出如下:

Original list : [1, 4, 6, 7, 2]
List after left rotate by 3 : [7, 2, 1, 4, 6]
List after right rotate by 3(back to original) : [1, 4, 6, 7, 2]

方法3:使用collections.deque.rotate()

收集模块具有双端队列类, 该类提供rotate(), 这是允许旋转的内置函数。这是鲜为人知的功能, 但实用性更高。

# Python3 code to demonstrate 
# rotation of list 
# using rotate()
from collections import deque
  
# initializing list
test_list = [ 1 , 4 , 6 , 7 , 2 ]
  
# printing original list 
print ( "Original list : " + str (test_list))
  
# using rotate() to left rotate by 3
test_list = deque(test_list)
test_list.rotate( - 3 )
test_list = list (test_list)
  
# Printing list after left rotate
print ( "List after left rotate by 3 : " + str (test_list))
  
# using rotate() to right rotate by 3
# back to Original
test_list = deque(test_list)
test_list.rotate( 3 )
test_list = list (test_list)
  
# Printing after right rotate
print ( "List after right rotate by 3(back to original) : "
                                         + str (test_list))

输出如下:

Original list : [1, 4, 6, 7, 2]
List after left rotate by 3 : [7, 2, 1, 4, 6]
List after right rotate by 3(back to original) : [1, 4, 6, 7, 2]

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: