Python 中數組旋轉的不同方法

在本教程中,我們將學習如何使用 Python 程序旋轉數組。我們將寫一個旋轉函數(arry[],E,K),它將用於將大小為 K = 8 的 arry[]旋轉 E = 4 個元素。

我們將數組旋轉 4 個元素後得到如下數組:

陣列旋轉的方法:

在本課程中,我們將討論用戶可以根據自己的需求使用不同的方法來旋轉陣列。

方法 1:通過使用臨時數組

在此方法中,我們將使用以下方法:


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

第一步:我們將在臨時數組中存儲“E”元素

溫度[] = [1,3,5,7]

第二步:我們將移動 arry[]的其餘部分

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

第三步:我們將存儲“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)

  • 我們將設置“for”條件,如果 J 等於 0 且小於 E,那麼 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]

步驟-

  • 首先,元素會被移動到第一個集合中——如下圖所示:

完成此設定後,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]

如果我們想旋轉數組超過它的長度,我們可以使用 mod 方法。

假設我們要通過“E”旋轉的數組是“K”大小,“E”大於“K”。在這種情況下,我們必須計算(E%K),然後我們可以通過 mod 計算後的輸出進行旋轉。

結論

在本文中,我們討論了如何使用 Python 使用不同的方法來旋轉給定的數組。


原創文章,作者:EIQZX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130131.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EIQZX的頭像EIQZX
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論