Python程序:旋转数组元素
在声明一个数组之后,将数组的元素旋转到某个索引位置之前,使前面的元素到达数组的最后,序列的最后一个元素后面。让我们用一个输入输出的场景来讨论这个问题。
输入输出场景
考虑一个数组arr = [1,2,3,4,5,6,7,8,9,10]。
- 我们可以清楚地说,初始数组由10个元素组成,最后一个元素的索引是9。
-
假设该数组被旋转2个元素。
-
在这种情况下,前两个元素放在最后一个元素“10”的后面。
-
首先,元素“1”将被放置在10之后,然后在放置元素“1”之后,下一个元素“2”将被放置在1旁边。
因此,得到的数组将是arr = [3,4,5,6,7,8,9,10,1,2]。
范例
在这个例子中,我们将讨论通过一定数量的旋转来旋转一个数组的某些元素(一次全部),构建程序所必须遵循的步骤如下:
- 声明一个处理数组元素旋转的函数或方法。
(注意:该方法的参数必须包含数组、数组的最大大小和用户需要的旋转次数)
- 在该方法中,考虑一个名为“temp”的新数组变量,以存储旋转后的数组元素。
-
通过变量“i”和循环,迭代数组的元素(直到索引等于旋转次数),并将元素逐个追加到“temp”数组中。
-
考虑另一个循环,并相应地存储下一个索引中的元素。
-
现在,将数组“arr”合并到数组“temp”中,并将该值存储到数组“arr”中。
def rotate_elements(arr, max, no_of_elements):
temp = []
i = 0
while (i < no_of_elements):
temp.append(arr[i])
i += 1
i = 0
while (no_of_elements < max):
arr[i] = arr[no_of_elements]
i = i + 1
no_of_elements = no_of_elements + 1
arr[:] = arr[: i] + temp
return arr
arr = [1,2,3,4,5,6,7,8,9,10]
print("旋转前的数组为:", end =' ')
print(arr)
print("旋转后的数组为:", end=' ')
max_size = len(arr)
print(rotate_elements(arr, max_size, 2))
输出
上述程序的输出如下所示:
旋转前的数组为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
旋转后的数组为:[3, 4, 5, 6, 7, 8, 9, 10, 1, 2]
范例
在此示例中,我们将讨论如何通过一定数量的旋转逐个旋转数组的某些元素
(一次一个),构建程序所必须遵循的步骤如下:
- 声明一个处理数组元素旋转的函数或方法。
(注意:该方法的参数必须包含数组、数组的最大大小和用户需要的旋转次数)
- 在该方法中,通过循环迭代数组的每个元素。
-
将每个元素逐个复制到一个名为temp的新数组变量中。
-
将temp数组的前两个元素旋转到末尾,存储下标变量为“no_of_elements”和“no_of_elements+1”。
-
现在,将数组“arr”合并到数组“temp”中,并将该值存储到数组“arr”中。
def rotate_individual_items(arr, max, no_of_elements):
for i in range(0, no_of_elements):
temp = arr[0]
for j in range(0, max-1):
arr[j] = arr[j+1]
arr[max-1] = temp
return arr
arr = [1,2,3,4,5,6,7,8,9,10]
print("旋转前的数组为:", end =' ')
print(arr)
print("旋转后的数组为:", end=' ')
max_size = len(arr)
print(rotate_individual_items(arr, max_size, 2))
输出
上述程序的输出如下所示:
旋转前的数组为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
旋转后的数组为:[3, 4, 5, 6, 7, 8, 9, 10, 1, 2]
- 声明两个函数,第一个函数用于迭代所有元素,直到总旋转次数,并同时调用第二个方法,以便在迭代元素后立即允许元素旋转。
(请注意,方法的参数必须包括数组,数组的最大大小和用户要求的旋转次数)
- 在第二种方法中,考虑一个名为“temp”的空数组,以存储旋转后的数组元素。
-
在一个变量“i”和循环的帮助下,从索引0到最后一个元素的最后一个索引迭代所有元素,并一个接一个地旋转数组的元素。
-
打印旋转后数组“arr”中的元素。
def rotate_elements(arr, no_of_elements, max):
for i in range(no_of_elements):
rotate_one_by_one(arr, max)
def rotate_one_by_one(arr, max):
temp = arr[0]
for i in range(max-1):
arr[i] = arr[i+1]
arr[max-1] = temp
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("旋转前的数组:")
print(arr)
rotate_elements(arr, 2, 10)
print("旋转后的数组:")
print(arr)
输出
以上程序的输出如下 –
旋转前的数组:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
旋转后的数组:
[3, 4, 5, 6, 7, 8, 9, 10, 1, 2]
结论
我们可以清楚地观察到上述两个程序产生的输出完全相等。两个程序之间的唯一区别在于程序体内的处理过程和所使用的方法。在第一个程序中,使用外部数组一起旋转元素。在第二个程序中,使用两个不同的方法依次旋转元素,通过调用方法。以这种方式,可以旋转数组的元素。