日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python数据结构——array

發布時間:2025/3/21 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python数据结构——array 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

array 數組

array是什么

一般來說,array基本是所有程序語言都有的一種基礎線性結構,元素以特定的順序存儲在一段連續的內存中。

在Python中其實也有array這種數據結構,和其他語言的array一樣,也是內存連續,只能存儲相同類型元素的線性數據結構,而且Python的array只能存儲數值和字符。


array有哪些功能

這里只講一下內置array。需要先import array:

# 可以直接使用內置arrayfrom array import array# 或是從numpy中引用arrayimport numpy as npnp.array()

array的創建

# 構造方法如下# 需要提供一個類型代碼字符來指示存儲何種元素# 以及一個可迭代對象來填充元素array.array(typecode[, initializer])# array所有的類型代碼字符print(array.typecodes)bBuhHiIlLqQfd# 創建一個存儲整型的arrayarr = array('i', [1,2,3,4,5,6])

array類型代碼

從Python類型來看,只能存儲整數,浮點數和unicode字符

并且在Python中,最小的整型size為28個字節,整型的長度可變, 每增加2302^{30}230就增加4個字節。這點以后再補充。


array的方法和操作

這里暫且只談一下數據結構比較基本的增刪改查等操作, 更多代碼詳情見github

具體實現可參考此處

索引

下標索引

所有語言的array都可以通過下標來直接訪問對象。

這一點是由計算機的硬件實現的。我們知道array的元素在內存上的分布是連續的,而且元素種類相同,所以數組中任意一項的地址可以由基本地址和偏移量算出。基本地址就是第一個元素的地址,偏移量就等于索引乘以數組內任意元素占用的內存大小。

時間復雜度:

因為每一次找到對應的元素只需要一次計算,所以索引的時間復雜度為O(1)O(1)O(1)


切片索引

array通過下表索引固然很方便,但有時我們想一次性獲取更多的內容,此時可以使用切片索引。

array[i1:i2]可以返回一個新的數組,包含原數組索引為i1到i2-1的全部元素

時間復雜度:

切片索引的實際操作為:

def slice(i1, i2):res_arr = array(typecode) # 先創建一個新的數組for i in range(i1, i2): # 然后按照索引依次讀取原數組中的元素val = arr[i] res_arr.append(val) # 將這些元素添加到新的數組中return res_arr

因此切片索引的時間復雜度為O(2k)?O(k)O(2k) \Rightarrow O(k)O(2k)?O(k)kkk指的是參數的數量


增加元素

append()

array.append(x)可以直接在數組的末尾添加新元素

時間復雜度:

要想增加元素,我們必須先定位到最后一位元素的后一位,然后執行賦值操作

所以索引到最后一個元素和增加一個元素都只需要一次運算,時間復雜度為O(1)O(1)O(1)


insert()

insert(i, x)可以用來在索引i處添加元素x

時間復雜度:

要想在索引i插入某個元素,我們必須先將索引i及之后的元素向后移動一位,然后再給索引i賦值

因此插入元素時需要的后移操作的次數和數組內元素的個數有關,所以時間復雜度為O(n)O(n)O(n)


extend()

extend(iterable)操作將一個可迭代對象的每一個元素添加到數組末尾,如果數據類型和數組的數據類型不匹配會有TypeError異常

時間復雜度:

操作過程為先遍歷讀取可迭代對象的每個元素,然后添加到數組末尾,時間復雜度為O(k)O(k)O(k)


刪除元素

pop()

pop(i=-1)用來移除數組中的某個元素并返回,可以傳入索引值,默認為-1。也就是說pop()默認移除最后一位元素。

時間復雜度:

如果只是移除最后一位元素,那么時間復雜度為O(1)O(1)O(1)

如果移除的是數組中的元素,那么還需要進行數據前移,前移的次數也和數組大小有關,因此時間復雜度為O(n)O(n)O(n)


remove()

remove(x)操作可以移除x元素在數組中的第一個匹配項

時間復雜度:

remove(x)操作可以視為先查找再移除最后數據前移,而查找和數據前移都和數組的大小有關,所以時間復雜度為O(n)O(n)O(n)。但實際使用上,remove()的操作效率較低,因為同時執行了查找和數據前移操作。


修改元素

array的元素修改直接通過索引完成

時間復雜度:

如果是下標索引,時間復雜度為O(1)O(1)O(1)

如果是切片索引,時間復雜度為O(k)O(k)O(k),可看成下標索引重復kkk


查找元素

index()

index(x)操作可以返回元素x第一次出現的索引值,如果沒找到會出現ValueError異常

時間復雜度:

為了查找特定元素,我們需要遍歷數組,所以時間復雜度為O(n)O(n)O(n)


count()

count(x)操作可返回元素x在數組中出現的次數

時間復雜度:

同樣的,需要遍歷整個數組才能得到結果,所以時間復雜度為O(n)O(n)O(n)


array的優點和缺點

優點

  • 數組比列表更精簡:Python數組跟C語言數組一樣精簡。創建數組需要一個類型碼,這個類型碼用來表示在底層的C語言應該存放怎樣的數據類型。比如b類型碼代表的是有符號的字符(signedchar),array(‘b’)創建出的數組就只能存放一個字節大小的整數,范圍從-128到127,這樣在序列很大的時候,我們能節省很多空間。
  • 數組提供更快的文件處理方法:另外,數組還提供從文件讀取和存入文件的更快的方法,如.frombytes和.tofile。
  • 缺點
    3. 元素類型限制:使用時必須要限制元素類型
    4. 不利于數據修改:插入和刪除操作需要移動一系列元素。



    相關章節

    Python數據結構——array
    Python數據結構——list
    Python數據結構——tuple

    總結

    以上是生活随笔為你收集整理的Python数据结构——array的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。