首頁 > 軟體

python陣列的複製與列表中的pop

2022-04-06 13:00:18

讓我們看看如何在 Python 中複製陣列。 有 3 種複製陣列的方法:

  • 只需使用賦值運運算元。
  • 淺拷貝
  • 深拷貝

1 使用賦值運運算元

我們可以使用賦值運運算元 (=) 建立陣列的副本。

語法:

new_arr = old_ arr

在 Python 中,Assignment 語句不復制物件,它們在目標和物件之間建立繫結。 當我們使用 = 運運算元時,使用者認為這會建立一個新物件; 好吧,事實並非如此。 它只建立一個共用原始物件參照的新變數。

範例:

from numpy import *                  
 
arr1 = array([2, 6, 9, 4])            
 
print(id(arr1))
 
arr2 = arr1                         
 
print(id(arr2))
 
arr1[1] = 7                        
 
print(arr1)
print(arr2)

我們可以看到兩個陣列都參照了同一個物件。

2 淺拷貝

一個淺副本意味著構造一個新的集合物件,然後用對原始中找到的子物件的參照填充它。 複製過程不會重複,因此不會建立子物件本身的副本。 在淺拷貝的情況下,物件的參照被複制在另一個物件中。 這意味著對物件的副本所做的任何更改都會在原始物件中反映。 我們將使用檢視view()函數來實現淺副本。

範例:

from numpy import *                 
  
arr1 = array([2, 6, 9, 4])
 
print(id(arr1))
 
arr2 = arr1.view() 
 
print(id(arr2))
  
arr1[1] = 7                       
  
print(arr1)
print(arr2)

這次雖然2個陣列參照了不同的物件,但在更改一個陣列值的時候,另一個的值也被更改。

3 深度拷貝

深度拷貝是一個過程,其中複製過程遞迴地發生。 它意味著首先構建一個新的儲存物件,然後用原稿中找到的子物件的副本遞迴地填充它。 在深度拷貝的情況下,將物件的副本複製到另一個物件中。 這意味著對物件的副本所做的任何更改都不反映在原始物件中。 我們將使用copy()函數來實現深度副本。

範例:

from numpy import *                 
  
arr1 = array([2, 6, 9, 4])
 
print(id(arr1))
 
arr2 = arr1.copy()
 
print(id(arr2))
  
arr1[1] = 7                       
  
print(arr1)
print(arr2)

這次在一個陣列中所做的更改不會對映在其他陣列中。

4 深度拷貝進階

如果您正在處理numpy矩陣,則numpy.copy()將為您提供深度拷貝。 但是,如果您的矩陣是列表的列表,那麼請考慮旋轉影象90度的任務中使用以下方法:

範例:

import copy
 
def rotate_matrix(image):
    copy_image_one = copy.deepcopy(image)
    print("Original", matrix)
    print("Copy of original", copy_image_one)
    N = len(matrix)
 
    for row in range(N):
        for column in range(N):
            copy_image_one[row][column] = image[row][N-column-1]
 
    print("After modification")
    print("Original", matrix)
    print("Copy", copy_image_one)
 
    copy_image_two = [list(row) for row in copy_image_one]
 
    for row in range(N):
        for column in range(N):
            copy_image_two[column][row] = copy_image_one[row][column]
 
    return copy_image_two
 
 
if __name__ == "__main__":
    matrix = [[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]]
    print("Rotated image", rotate_matrix(matrix))

Python列表POP()是Python中的內建函數,該函數刪除並返回列表或給定索引值的最後一個值。

語法:

list_name.pop(index)

引數:

  • index(可選) - 彈出並刪除索引處的值。 如果未給出索引,則會彈出並刪除最後一個元素。

返回值:列表中的最後一個值或給定的索引值。

例外:當索引超出範圍時,它會返回IndexError

例一:

list1 = [ 1, 2, 3, 4, 5, 6 ]
 
print(list1.pop())
 
print("New List after pop : ", list1, "n")
 
list2 = [1, 2, 3, ('cat', 'bat'), 4]
 
print(list2.pop())
print(list2.pop())
print(list2.pop())
 
print("New List after pop : ", list2, "n")

例二:

list1 = [ 1, 2, 3, 4, 5, 6 ]
 
print(list1.pop(), list1)

print(list1.pop(0), list1)

例三:

list1 = [ 1, 2, 3, 4, 5, 6 ]
print(list1.pop(8))

例四:

fruit = [['Orange','Fruit'],['Banana','Fruit'], ['Mango', 'Fruit']]
consume = ['Juice', 'Eat']
possible = []

for item in fruit :

    for use in consume :
         
        item.append(use)
        possible.append(item[:])
        item.pop(-1)
print(possible)

到此這篇關於python陣列的複製與列表中的pop的文章就介紹到這了,更多相關python陣列複製與pop()內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com