不同的Python数组旋转方法

不同的Python数组旋转方法

在这个教程中,我们将学习如何使用Python程序来旋转数组。我们将编写一个旋转函数(arry[],E,K),用于将大小为K=8的arry[]旋转E=4个元素。

不同的Python数组旋转方法

将数组旋转4个元素后,我们将得到以下数组:

不同的Python数组旋转方法

数组旋转的方法

在本次会议中,我们将讨论用户可以根据他们的需求使用的不同方法来旋转数组。

方法1:使用临时数组

在这种方法中,我们将使用以下的方法:

Input arry[] = [1, 3, 5, 7, 9, 11, 13, 15], E = 4, N = 8

步骤1: 我们将把“E”元素存储在一个临时数组中

Temp[] = [1, 3, 5, 7]

步骤2: 我们将移动剩余的数组元素

arry[] = [9, 11, 13, 15]

步骤3: 我们将存储“E”元素

arry[] = [9, 11, 13, 15, 1, 3, 5, 7]

示例:

def rotate_array1(arry, K, E):
    temp_1 = []
    J = 0
    while (J < E):
        temp_1.append(arry[J])
        J = J + 1
    J = 0
    while (E < K):
        arry[J] = arry[E]
        J = J + 1
        E = E + 1
    arry[:] = arry[: J] + temp_1
    return arry


# Driver function to test above function
arry = [1, 3, 5, 7, 9, 11, 13, 15]
print ("Array after Rotation by 4 elements is: ", end = ' ')
print (rotate_array1(arry, len(arry), 4))

输出:

Array after Rotation by 4 elements is: [9, 11, 13, 15, 1, 3, 5, 7]

以上方法中:

Time Complexity: O(K)                      [K = size of array]
Auxiliary Space: O(E)                         [E = number of elements to be rotated]

方法2:逐个旋转元素

在这种方法中,我们将使用以下方法:

rotate_array1(arry[], E, K)

  • 如果J等于0且小于E,则for条件将使rotate_array1函数旋转所有元素

我们需要将arry[0]存储在临时变量”temp_1″中以将元素旋转一个位置。然后我们将arry[1]移动到arry[0],arry[2]移动到arry[1],依此类推。最后,arry[n-1]将变为temp_1。

示例:

def rotate_array1(arry, K, E):
    for J in range(E):
        rotate_by_one(arry, K)

#Now, we will define a function to rotate arry[] of size K by 1
def rotate_by_one(arry, K):
    temp_1 = arry[0]
    for J in range(K - 1):
        arry[J] = arry[J + 1]
    arry[K - 1] = temp_1


# Then, we will define a utility function for printing an array
def print_array(arry, size_1):
    for J in range(size_1):
        print ("%d" % arry[J], end = " ")


# At last, we will write a driver program for testing the above functions 
arry = [1, 3, 5, 7, 9, 11, 13, 15]
rotate_array1(arry, 4, 8)
print ("The array after rotation: ") 
print_array(arry, 8)

输出:

The array after rotation: 
1 3 5 7 9 11 13 15

在上述方法中:

Time Complexity: O(K * E)                      [K = size of array]
                        [E = number of elements to be rotated]
Auxiliary Space: O(1)                         

方法3:使用旋转算法

在这个方法中,我们将把数组分成不同的集合,而不是逐个移动元素。

当集合数等于“K”和“E”的最大公约数时,代码会将元素移动到这些集合中。

如果最大公约数等于1,那么元素将只会移动到一个集合中。在这里,我们将从temp_1 = arry[0]开始,它将不断地将arry[J + E]移动到arry[J],最后将temp_1存放在正确的位置。

让我们看一个示例,其中K = 16,E = 4。最大公约数(G_C_D) = 4

arry[] = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

步骤-

  • 首先,元素将被移动到第一组中 – 如下图所示:
    不同的Python数组旋转方法

完成这组后,arry[] 将等于 [ _15_ , 12, 13, 14, _19,_ 16, 17, 18, _23_ , 20, 21, 22, 11, 23, 24, 25, 26]

  • 然后在第二组:arry 将变为 [15, _16_ , 13, 14, 19, _20_ , 17, 18, 23, _24_ , 21, 22, 11, _12_ , 24, 25, 26]
  • 在第三组:arry 将变为 [15, 16, _17_ , 14, 19, 20, _21_ , 18, 23, 24, _25_ , 11, 12, _13_ , 26]
  • 最后,在第四组:arry 将变为 [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 11, 12, 13, 14]

示例:

def rotate_array1(arry, K, E):
    for J in range(G_C_D(E, K)):

        # now, we will move the J-th values of blocks
        temp_1 = arry[J]
        S = J
        while 1:
            F = S + E
            if F >= K:
                F = F - K
            if F == J:
                break
            arry[S] = arry[F]
            S = F
        arry[S] = temp_1

# Then, we will define a utility function for printing an array

def print_array(arry, size_1):
    for J in range(size_1):
        print ("%d" % arry[J], end = " ")

#Here, we will define a Function for getting G_C_D of Sets
def G_C_D(X, Y):
    if Y == 0:
        return X;
    else:
        return G_C_D(Y, X % Y)

# Driver program to test above functions
arry = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
rotate_array1(arry, 4, 16)
print ("The array after rotation: ") 
print_array(arry, 16)

输出:

The array after rotation:
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 11, 12, 13, 14]

在上述方法中:

Time Complexity: O(K )                      [K = size of array]
Auxiliary Space: O(1)                         

方法4:使用列表切片

在此方法中,我们将使用列表切片来旋转数组的元素。

示例:

def rotate_List1(arry, E, K):
  arry[:] = arry[E:K] + arry[0:E]
  return arry
# We will write a driver program for testing the above functions 
arry = [11, 12, 13, 14, 15, 16, 17, 18]
print ("The List is: ", arry)
print ("The rotated list is: ")
print (rotate_List1(arry, 4, len(arry)))

输出:

The List is: [11, 12, 13, 14, 15, 16, 17, 18]
The rotated list is: 
[15, 16, 17, 18, 11, 12, 13, 14]

如果我们想将数组旋转超过其长度,可以使用模运算方法。

假设我们要旋转的数组“E”的大小为“K”,而“E”大于“K”。在这种情况下,我们必须计算(E%K),然后我们可以在模运算后旋转输出。

结论

在本文中,我们讨论了如何使用Python使用不同的方法来旋转给定的数组。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程