Python語言中使用array模塊實現動態數組的操作

2021-01-11 編碼那些事

背景

對於動態數組諸如創建、插入、刪除、查詢大小等操作,在C/C++語言中,可以使用標準庫中的vector類實現,而在python語言中,也同樣提供了內置的array模塊實現類似的功能。

Python中的array類似於列表list,如都可以動態增刪元素,但又有所區別,list中存儲的元素類型可以不一樣,但array中元素類型必須完全一樣。另外,由於list中每個元素同時存儲了其地址即指針(用以標記每個元素的數據類型)和實際的數據,所以,在存儲及操作效率上,array又遠遠高於列表。

下面通過例子講解array模塊的常用操作。

動態數組的創建

創建方式為:array.array(typecode[, initializer]),第1個參數typecode定義了數組元素的類型,第2個可選參數給出了數組中的初始值。如下面的代碼創建了一個int型的包含3個元素的數組x,其初始值為分別為1、2、3。其索引方式同列表類似,下標從0開始,如x[1]代表取數組x中的第2個元素。

import array

x = array.array(『i, [1, 2, 3]

在數組的定義中,數組元素的類型通過一個字符typecode參數指定,它的取值情況如下表所示:

動態數組的常用操作

1、數組元素的增加

x.append(2)

x.extend([5, 1]

x.insert(3, 9)

其中,append在數組的末尾增加一個元素,extend在數組的末尾增加多個元素,insert(i, x)在指定位置i處增加一個元素。

2、數組元素的刪除

x.pop()

x.pop(1)

x.remove(3)

其中,pop(i)刪除第i個元素,當參數為空時,刪除最後一個元素。remove(x),刪除第一個出現的x值。

3、數組的其它操作

x.typecode #返回當前數組的元素類型

x.itemsize #返回當前數組中每個元素的字節大小

x.buffer_info() #返回包含2個元素的一個元組,第1個是數組的內存地址,第2個是數組中元素的個數

x.count(3) #統計數組中3出現的次數

x.index(3) #返回數組中3第一次出現的位置

x.byteswap() #對數組中的每個元素進行字節高、低位交換

x.reverse() #對數組中的元素逆序排列

備註

數組array模塊的操作函數同列表list類似,但是其運行及存儲效率要遠遠高於列表list,這在動態數據的採集場合是用的比較多的。這兒只給出了該模塊的一些常用操作,還有其它的一些函數,大家可以自行查看幫助,比較簡單。本文的完整例子代碼如下:

運行結果如下圖所示:

歡迎加關注,共同交流。

相關焦點

  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    在Python語言中,可以使用ctypes模塊調用其它如C++語言編寫的動態連結庫DLL文件中的函數,在提高軟體運行效率的同時,也可以充分利用目前市面上各種第三方的DLL庫函數,以擴充Python軟體的功能及應用領域,減少重複編寫代碼、重複造輪子的工作量,這也充分體現了Python語言作為一種膠水語言所特有的優勢
  • Python使用ctypes模塊調用DLL函數之複數數組的參數傳遞
    這兒就涉及到了如何將C語言中的複數數組(Complex array)類型與Python中的數據類型進行交互的問題。在Python語言中,可以使用ctypes模塊調用其它如C++語言編寫的動態連結庫DLL文件中的函數,前面多篇文章中已經講了傳遞數值/指針/字符串參數、傳遞結構體參數、傳遞普通數組類型的例子,大家可以回看一下,這樣可以更好的理解本次要講的內容。
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • 單片機的C語言中數組的用法
    數組是由具有相同類型的數據元素組成的有序集合。數組是由數組名來表示的,數組中的數據由特定的下標來唯一確定。引入數組的目的,是使用一塊連續的內存空間存儲多個類型相同的數據,以解決一批相關數據的存儲問題。數組與普通變量一樣,也必須先定義,後使用。數組在C51語言的地位舉足輕重,因此深入地了解數組是很有必要的。
  • Python入門教程(二):Numpy數組基礎
    Python中的數組操作幾乎等同於Numpy數組操作,今天我們會展示用Numpy數組操作獲取數據或者子數組,對數組進行分裂,變形和連接的例子。首先,我們先介紹幾類基本的數組操作:數組的屬性確定數組的大小,形狀,儲存大小,數據類型數組的索引:獲取和設置各個元素的值數組的切分:在大的數組中獲取或設置更小的子數組
  • Python的武器庫04:numpy模塊(上)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以又這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。Python正式由於這些模塊的出現,只要引入這個模塊,調用這個模塊的集成函數,問題迎刃而解;不需要從頭開始,節省了大量的時間。
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    了解 NumPy 之後,我才想明白當初磁層頂的三維模型之所以慢,是因為使用了 list(Python 數組)而不是 ndarray(NumPy 數組)存儲數據。有了 NumPy,Python 程式設計師才有可能寫出媲美 C 語言運行速度的代碼。熟悉 NumPy,才能學會使用 PyOpenGL / PyOpenCV / Pandas / Matplotlib 等數據處理及可視化的模塊。
  • C語言編程技巧:以實例跟我學動態數組的創建及使用方法
    在C語言中提供了諸如內存的申請、釋放等管理函數,然後結合指針可以按需動態地分配內存空間,來構建動態數組,達到有效利用計算機內存資源的手段。基本函數說明C語言中用於動態數組操作的函數主要包括malloc、calloc、realloc和free等,每個函數的原型、參數意義及功能說明如下表所示:下面通過一個例子演示動態數組的創建及使用方法。
  • 如果不懂Numpy,請別說自己是Python程式設計師
    了解 numpy之後,我才想明白當初磁層頂的三維模型之所以慢,是因為使用了 list(python 數組)而不是 ndarray(numpy 數組)存儲數據。有了 numpy,python 程式設計師才有可能寫出媲美 C 語言運行速度的代碼。
  • 【Rust每周一庫】generic-array-長度為範型的靜態數組
    今天是2021年的第一天,大家新的一年也要好好學習Rust呀~在很多其他語言中,靜態數組雖然是靜態的,但是我們卻可以「給它在運行時中指定一個動態的長度」。但在Rust中由於數組中的N並不是範型,所以我們無法寫出如下的代碼:structFoo {data: [i32; N]}今天我們介紹的generic-array庫定義了trait 和結構體,這樣我們就可以寫出剛才我們想要的等價結構體了:structFoo {data: GenericArray}
  • LeetCode刷題第三周【數組(簡單)】
    數組是目前Leetcode上題量最多的一個模塊了。刷題前我們來了解一下什麼是數組:數組是在程序設計中,為了處理方便, 把具有相同類型的若干元素按有序的形式組織起來的一種形式。首先,數組會利用 索引 來記錄每個元素在數組中的位置,且在大多數程式語言中,索引是從 0 算起的。我們可以根據數組中的索引,快速訪問數組中的元素。事實上,這裡的索引其實就是內存地址。
  • python基礎-bytes和bytearray的用法
    Python中的序列類型有bytes和bytearray。二進位序列類型的用法比較少見,是python中少用的一種序列類型,對於二進位序列類型,大家基本了解即可。bytes二進位序列類型指定長度的零填充字節對象: bytes(3)二進位字符串對象:bytes(b'abc')bytearray二進位數組指定長度的零填充字節對象: bytearray(3)二進位字符串對象:bytearray(b'abc')實例:print(type("ffff
  • 加快Python算法的四個方法(二)Numba
    使用Numba,你可以加速所有以集中計算的、計算量大的python函數(例如循環)的速度。它還支持numpy庫!因此,你也可以在計算中使用numpy,並加快整體計算的速度,因為python中的循環非常慢。你還可以使用python標準庫中的數學庫的許多功能,例如sqrt等。2.為什麼選擇Numba?所以,為什麼要選擇Numba?
  • 使用機器學習和Python揭開DNA測序神秘面紗
    使用Python處理DNA序列數據熟悉諸如Biopython和squiggle之類的Python包將在處理Python中的生物序列數據時為您提供幫助。Biopython是python模塊的集合,這些模塊提供處理DNA,RNA和蛋白質序列操作的功能,例如DNA字符串的反向互補,尋找蛋白質序列中的基序列等。
  • Python十大工具,讓圖像簡潔直觀有魅力!
    因此,圖像處理就是對數字圖像進行分析、操作的過程,其主要目的是為改善圖像質量或從中提取一些有用信息。圖像處理的常見任務包括圖像顯示、圖像基本操作(裁剪、翻轉、旋轉等)、圖像分割、分類及特徵提取、圖像修復和圖像識別。而Python作為一種科學程式語言已在日漸普及,在生態系統庫中還免費提供了許多最為先進的圖像處理工具,因此成為了圖像處理的最佳選擇。
  • LeetCode數組類知識點&題型總結
    數組(array)就是典型的順序存儲,而鍊表就是典型的非順序存儲。數組通常用於存儲一系列相同類型的數據。當我們在創建數組時,會在內存中劃分出一塊連續的內存用於存儲數據,插入數據時,會將數據按順序存儲在這塊連續的內存中,讀取時通過訪問數組的索引迅速取出。數組名就是一個指針,指向這段內存的起始地址。通過數組的類型,編譯器知道在訪問下一個元素的時候需要在內存中後移多少個字節。
  • VPF:適用於 Python 的開源視頻處理框架,加速視頻任務、提高 GPU...
    同時,由於 Python 綁定下的 C ++代碼,它使開發者可以在數十行代碼中實現較高的 GPU 利用率。解碼後的視頻幀以 NumPy 數組或 CUDA 設備指針的形式公開,以簡化交互過程及其擴展功能。目前,VPF 並未對 NVIDIA Video Codec SDK 附加任何限制,開發者可充分利用 NVIDIA 專業級 GPU 的功能。
  • 用R也可以跑Python了
    在R中導入一個python模塊您可以使用函數import()來導入特定的包或模塊。>首先建立一個簡單的numpy數組y <- array(1:4, c(2, 2))您在Python中創建的對象可在R中使用(反之亦然)。通過使用repl_python()函數,可以使Python和R交互。
  • PHP函數in_array()如何檢查數組中的值
    PHP函數in_array()如何檢查數組中的值 PHP函數in_array()可以幫助我們輕鬆的完成對數組中某個值的檢查。我們下面就舉一個例子來幫助大家理解PHP函數in_array()的具體應用。
  • Python中NumPy簡介及使用舉例
    NumPy是Python語言的一個擴展包。支持多維數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。NumPy提供了與Matlab相似的功能與操作方式,因為兩者皆為直譯語言。它描述相同類型的元素集合,可以使用基於零的索引訪問集合中元素。基本的ndarray是使用NumPy中的數組函數創建的: numpy.array。NumPy支持比Python更多種類的數值類型。NumPy數值是dtype(數據類型)對象的實例,每個對象具有唯一的特徵。