python之關(guān)于數(shù)組和列表的區(qū)別及說(shuō)明
python數(shù)組和列表的區(qū)別
列表和數(shù)組的定義
- 列表用于順序存儲(chǔ)結(jié)構(gòu)。它可以方便、高效的的添加刪除元素,并且列表中的元素可以是多種類(lèi)型。
- 數(shù)組是一個(gè)同一類(lèi)型的數(shù)據(jù)的有限集合。
數(shù)組是什么?
數(shù)組(Array)是一種線性表數(shù)據(jù)結(jié)構(gòu)。它用一組連續(xù)的內(nèi)存,來(lái)存儲(chǔ)一組具有相同類(lèi)型的數(shù)據(jù)。
- 優(yōu)點(diǎn):數(shù)組地址是連續(xù)的會(huì)給我們查找數(shù)據(jù)提供了極大的方便,讓我們很容易的就能根據(jù)下標(biāo)找到你需要的數(shù)據(jù),提高了查詢(xún)效率
- 缺點(diǎn):畢竟我們對(duì)數(shù)組的運(yùn)用不只是查找數(shù)據(jù),還有增加數(shù)據(jù),插入數(shù)據(jù),刪除數(shù)據(jù)等一些操作;由于數(shù)組的特殊性,使得我們?cè)谶M(jìn)行這些操作的時(shí)候不能對(duì)其進(jìn)行直接操作,還要重新開(kāi)辟一個(gè)新的數(shù)組并使其長(zhǎng)度增加來(lái)存放數(shù)據(jù),這樣的工作模式給我們帶來(lái)了很大的不便,影響了效率
**用線性表存儲(chǔ)的數(shù)據(jù)有兩個(gè)特點(diǎn)
- 存儲(chǔ)的數(shù)據(jù)本身的類(lèi)型一定保持相同,是int型就都是int型,是結(jié)構(gòu)體就都是一種結(jié)構(gòu)體。
- 數(shù)據(jù)一旦用線性表存儲(chǔ),各個(gè)數(shù)據(jù)元素之間的相對(duì)位置就固定了。
形象地來(lái)看,線性表就是數(shù)據(jù)排成像一條線一樣的結(jié)構(gòu),并且最多只有前和后兩個(gè)方向。數(shù)組、鏈表隊(duì)列、棧等都是線性表結(jié)構(gòu)。
與其對(duì)立的概念是非線性表,如二叉樹(shù)、堆等。在非線性表中,數(shù)據(jù)之間并不是簡(jiǎn)單的前后關(guān)系。
將列表當(dāng)做堆棧使用
列表方法使得列表可以很方便的作為一個(gè)堆棧來(lái)使用,堆棧作為特定的數(shù)據(jù)結(jié)構(gòu),最先進(jìn)入的元素最后一個(gè)被釋放(后進(jìn)先出)。
用 append() 方法可以把一個(gè)元素添加到堆棧頂。
用不指定索引的 pop() 方法可以把一個(gè)元素從堆棧頂釋放出來(lái)
>>> stack = [3, 4, 5] >>> stack.append(6) >>> stack.append(7) >>> stack [3, 4, 5, 6, 7] >>> stack.pop() 7 >>> stack [3, 4, 5, 6] >>> stack.pop() 6 >>> stack.pop() 5 >>> stack [3, 4]
將列表當(dāng)作隊(duì)列使用
也可以把列表當(dāng)做隊(duì)列用,只是在隊(duì)列里第一加入的元素,第一個(gè)取出來(lái);但是拿列表用作這樣的目的效率不高。在列表的最后添加或者彈出元素速度快,然而在列表里插入或者從頭部彈出速度卻不快(因?yàn)樗衅渌脑囟嫉靡粋€(gè)一個(gè)地移動(dòng))。
相同點(diǎn):
- 都可以根據(jù)索引來(lái)取其中的元素;
不同點(diǎn):
- 列表list中的元素的數(shù)據(jù)類(lèi)型可以不一樣。數(shù)組array里的元素的數(shù)據(jù)類(lèi)型必須一樣;
- 列表list不可以進(jìn)行數(shù)學(xué)四則運(yùn)算,數(shù)組array可以進(jìn)行數(shù)學(xué)四則運(yùn)算;
- 相對(duì)于array,列表會(huì)使用更多的存儲(chǔ)空間。
import numpy as np list1=[1,'a','index'] #list1是列表類(lèi)型 list2 = np.array([1,2,3,4]) #list2是數(shù)組類(lèi)型 print("list",list1,list1[0],'\n','array',list2,list2[0]) 結(jié)果 打印結(jié)果: list [1,'a','index'] 1 array [1 2 3 4] 1
python數(shù)組和列表相互轉(zhuǎn)化
- 數(shù)組轉(zhuǎn)化為列表:b=array.tolist() (把數(shù)組array轉(zhuǎn)化為列表b)
- 列表轉(zhuǎn)化為數(shù)組:a=np.array(list) (把列表lis轉(zhuǎn)化為數(shù)組a)
具體代碼如下:
import numpy as np #1.隨機(jī)生成一個(gè)數(shù)組a a=np.random.randn(4,3) print(a) print(type(a)) #輸出結(jié)果如下: [[-1.95210222 2.68035264 1.16203014] [ 0.38123208 0.2106927 0.44987349] [-0.60820225 -0.80682695 -0.32048555] [-1.08573498 0.30206573 -0.79167439]] <class 'numpy.ndarray'> #2.數(shù)組a轉(zhuǎn)化為列表b b=a.tolist() print(b) print(type(b)) #輸出結(jié)果如下: [[-1.9521022160725312, 2.6803526394133774, 1.1620301390678258], [0.3812320771527832, 0.2106926970310233, 0.4498734879610045], [-0.6082022489361179, -0.8068269457410441, -0.3204855537284452], [-1.0857349768436102, 0.3020657339426819, -0.7916743865958161]] <class 'list'> #3.列表b轉(zhuǎn)化為數(shù)組c c=np.array(b) print(c) print(type(c)) #輸出結(jié)果如下: [[-1.95210222 2.68035264 1.16203014] [ 0.38123208 0.2106927 0.44987349] [-0.60820225 -0.80682695 -0.32048555] [-1.08573498 0.30206573 -0.79167439]] <class 'numpy.ndarray'>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python批量修改文件夾及其子文件夾下的文件內(nèi)容
這篇文章主要為大家詳細(xì)介紹了python批量修改文件夾及其子文件夾下的文件內(nèi)容,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03詳解Python中表達(dá)式i += x與i = i + x是否等價(jià)
這篇文章主要介紹了關(guān)于Python中表達(dá)式i += x與i = i + x是否等價(jià)的相關(guān)資料,文中通過(guò)示例代碼介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-02-02在Python的Django框架中編寫(xiě)編譯函數(shù)
這篇文章主要介紹了在Python的Django框架中編寫(xiě)編譯函數(shù),配合模版標(biāo)簽在模版中進(jìn)行使用<需要的朋友可以參考下2015-07-07Django 導(dǎo)出 Excel 代碼的實(shí)例詳解
本篇文章主要介紹了Django 導(dǎo)出 Excel 代碼的實(shí)例詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08使用python怎樣產(chǎn)生10個(gè)不同的隨機(jī)數(shù)
這篇文章主要介紹了使用python實(shí)現(xiàn)產(chǎn)生10個(gè)不同的隨機(jī)數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07