Python程序 列表元素的旋转

Python程序 列表元素的旋转

在Python中,列表可用于在单个变量中存储多个项目。列表是Python的四种内置数据类型之一,用于存储数据集合。其他三种——元组、集合和字典,每种都具有不同的功能。列表使用方括号构造。因为列表不必是同构的,所以它们是Python中最有用的工具。一个列表包含数据类型,如字符串、对象和整数。由于它们是可变的,因此可以在生成后修改列表。

本文的重点是简写和用一个词或一行话表达这个方法。这个操作对于程序员来说十分重要。我们将使用Python来看到完成这项任务的四种不同方法。

使用列表解析

使用此方法时,我们只需重新分配列表中每个元素的索引,在特定位置进行旋转。由于其较小的实现,此方法在完成任务中起着重要的作用。

算法

  • 首先定义一个列表。

  • 使用列表解析。

  • 分别对向右(i-index)和向左(i+index)应用两个不同的方法。

  • 打印输出的列表。

语法

#左旋

list_1 = [list_1[(i + 3) % len(list_1)]

#右旋

list_1 = [list_1[(i - 3) % len(list_1)]

示例

在本代码中,我们使用列表解析来旋转列表中的元素,即右旋和左旋。使用循环遍历元素列表。

list_1 = [10, 14, 26, 37, 42]
print("Primary list: " + str(list_1))
list_1 = [list_1[(i + 3) % len(list_1)]
           for i, x in enumerate(list_1)]
print("Output of the list after left rotate by 3: " + str(list_1))
list_1 = [list_1[(i - 3) % len(list_1)]
           for i, x in enumerate(list_1)]
print("Output of the list after right rotate by 3(back to primary list): " + str(list_1))
list_1 = [list_1[(i + 2) % len(list_1)]
           for i, x in enumerate(list_1)]
print("Output of the list after left rotate by 2: " + str(list_1))
list_1 = [list_1[(i - 2) % len(list_1)]
           for i, x in enumerate(list_1)]
print("Output of the list after right rotate by 2: " + str(list_1))

输出

Primary list: [10, 14, 26, 37, 42]
Output of the list after left rotate by 3: [37, 42, 10, 14, 26]
Output of the list after right rotate by 3(back to primary list): [10, 14, 26, 37, 42]
Output of the list after left rotate by 2: [26, 37, 42, 10, 14]
Output of the list after right rotate by 2: [10, 14, 26, 37, 42]

在本代码中,我们使用列表解析来旋转列表中的元素,即右旋和左旋。使用循环遍历元素列表。

使用切片

这种特定技术是标准技术。使用旋转数字,它只将后切片的组件连接到前切片的部分。

算法

  • 首先定义一个列表。

  • 使用切片方法。

  • 打印每个旋转操作后的列表。

语法

对于切片

#左旋

list_1 = list_1 [3:] + list_1 [:3]

#右旋

list_1 = list_1 [-3:] + list_1 [: - 3]

示例

以下程序重新排列列表的元素。原始列表是[11,34,26,57,92]。先向左旋转3个单位。即将前三个元素移动到末尾,得到[57,92,11,34,26]。然后向右旋转3个单位,使最后三个元素向前后移动到它们的原始位置[11,34,26,57,92]。

接着向右旋转2个单位,使最后两个元素向前移动,得到[26, 57, 92 11 34]。最后向左旋转1个单位,使一个元素从开头移动到末尾,这样就得到了[57 92 11 34 26]。

list_1 = [11, 34, 26, 57, 92]
print("原始列表: " + str(list_1))
list_1 = list_1[3:] + list_1[:3]
print("左移3位后的输出列表: " + str(list_1))
list_1 = list_1[-3:] + list_1[:-3]
print("右移3位后的输出列表(返回原始列表): "+str(list_1))
list_1 = list_1[-2:] + list_1[:-2]
print("右移2位后的输出列表: "+ str(list_1))
list_1 = list_1[1:] + list_1[:1]
print("左移1位后的输出列表: " + str(list_1))

输出

原始列表: [11, 34, 26, 57, 92]
左移3位后的输出列表: [57, 92, 11, 34, 26]
右移3位后的输出列表(返回原始列表): [11, 34, 26, 57, 92]
右移2位后的输出列表: [57, 92, 11, 34, 26]
左移1位后的输出列表: [92, 11, 34, 26, 57]

使用Numpy模块

使用numpy.roll模块可以通过指定轴来旋转列表中的元素。这将导致输入数组的项目被移位,如果一个元素从第一个位置移动到最后一个位置,它将反转到初始位置。

算法

  • 导入numpy.roll模块

  • 定义列表并给出特定的索引。

  • 输出列表。

示例

创建一个列表”number”并分配值1、2、4、10、18和83。将变量i设置为1。然后使用NumPy库中的np.roll()函数在列表number上使用参数i,它将把列表中的每个元素向右移动一个索引位置(第一个元素变为最后一个)。

import numpy as np
if __name__ == '__main__':
   number = [1, 2, 4, 10, 18, 83]
   i = 1
   x = np.roll(number, i)
   print(x)

输出

[83 1 2 4 10 18]

使用collections.deque.rotate()

rotate()函数是由collections模块中的deque类提供的内置函数,允许旋转。尽管不被广泛知晓,但该函数更为有用。

算法

  • 首先从collections模块中导入deque类。

  • 定义一个列表

  • 输出原始列表

  • 使用rotate()旋转元素

  • 输出结果。

示例

以下程序使用collections模块中的deque数据结构来旋转列表。先输出原始列表,然后向左旋转3位,并打印出新的旋转列表。然后向右旋转(回到原始位置)3位,并打印出结果列表。

from collections import deque
list_1 = [31, 84, 76, 97, 82]
print ("原始列表: " + str(list_1))
list_1 = deque(list_1)
list_1.rotate(-3)
list_1 = list(list_1)
print ("向左旋转3位后的输出列表: " + str(list_1))
list_1 = deque(list_1)
list_1.rotate(3)
list_1 = list(list_1)
print ("向右旋转3位后的输出列表(返回原始列表): "+ str(list_1))

输出

原始列表: [31, 84, 76, 97, 82]
向左旋转3位后的输出列表: [97, 82, 31, 84, 76]
向右旋转3位后的输出列表(返回原始列表): [31, 84, 76, 97, 82]

结论

本文简要介绍了旋转列表中元素的四种不同方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 实例