Python的二維數(shù)組初始化方式
Python的二維數(shù)組初始化問(wèn)題
Python一維數(shù)組初始化
In [1]: a = [0]*5 In [2]: a Out[2]: [0, 0, 0, 0, 0] In [3]: a[1]=1 In [4]: a Out[4]: [0, 1, 0, 0, 0]
Python的一維數(shù)組初始化時(shí)沒(méi)有太大問(wèn)題,但是二維初始化就不能這么搞了,不信你看
In [5]: a = [[0]*5]*5 In [6]: a Out[6]: [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] In [7]: a[1][1] = 1 In [8]: a Out[8]: [[0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0]]
這樣初始化實(shí)際上是相當(dāng)于淺拷貝,只拷貝了個(gè)索引。
應(yīng)該用列表生成器來(lái)初始化二維數(shù)組
In [12]: b = [[0]*5 for _ in range(5)] In [13]: b Out[13]: [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] In [14]: b[3][3] = 3 In [15]: b Out[15]: [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 3, 0], [0, 0, 0, 0, 0]]
Python創(chuàng)建二維數(shù)組和初始化
Python用什么表達(dá)二維數(shù)組
嚴(yán)格意義上說(shuō),Python中并沒(méi)有數(shù)組的概念,Python中表達(dá)一組數(shù)據(jù)有多種形式,例如list,tuple,set等數(shù)據(jù)結(jié)構(gòu)都可以表達(dá)一組數(shù),并且這組數(shù)也沒(méi)有C和C++中數(shù)組的的同質(zhì)限制,這些數(shù)可以是任何一種數(shù)據(jù)類型。
以list為例(list又叫列表),要想實(shí)現(xiàn)一個(gè)所謂的二維數(shù)組(有行有列),可以使用嵌套list來(lái)實(shí)現(xiàn)。例如:要想實(shí)現(xiàn)一個(gè)如
的一個(gè)2行3列的二維數(shù)組,可以使用如下嵌套list來(lái)表達(dá):
L = [[1, 2, 3], [4, 5, 6]]
如何初始化一個(gè)二維數(shù)組
在很多應(yīng)用場(chǎng)景下,二維數(shù)組的數(shù)據(jù)是從鍵盤(pán)或者其他什么文件中輸入的。這時(shí)就迫切需要初始化一個(gè)二維數(shù)組,等待數(shù)據(jù)的錄入。
1.利用list自身進(jìn)行構(gòu)造(注意,此方法并不能構(gòu)造完全靈活的二維數(shù)組,不建議采用)
list自身的構(gòu)造函數(shù)形式多種多樣。想構(gòu)建一個(gè)二維數(shù)組自然并非難事。
例如,想要構(gòu)建一個(gè)m行n列的二維數(shù)組??梢赃@樣初始化。
L = [[1, 2, 3], [4, 5, 6]]
展示結(jié)果如下:
如果想要給一個(gè)初始化的值,可以寫(xiě)成:
L = [[] * n] * m
則:
但是,由于此方法構(gòu)造的二維數(shù)組是對(duì)[]*n引用了m次,更改其中一行的值會(huì)導(dǎo)致每行的值都被更改。
所以,并不是一個(gè)可以完全操控到列粒度的二維數(shù)組。
應(yīng)用背景極其狹窄,不推薦使用。
m = 2 n = 3 L = [[3] * n] * m #構(gòu)造二維數(shù)組 print(L) L[0][1] = 5 #修改某一個(gè)值,其他行的對(duì)應(yīng)列值也會(huì)被修改。 print(L)
得到的結(jié)果為:
2.利用傳統(tǒng)的list的append方法,通過(guò)迭代構(gòu)造
m = 2 #2行 n = 3 #3列 l = 0 #行從0開(kāi)始 mat = [] # 定義一個(gè)二維數(shù)組mat while l < m: r = 0 #列從0開(kāi)始 line = [] #line存儲(chǔ)每一行數(shù)據(jù) while r < n: line.append(0) #裝載行數(shù)據(jù) r = r + 1 mat.append(line) #按行裝載二維數(shù)組 l = l + 1 print(mat)
得到的結(jié)果依然為:
3.利用numpy包構(gòu)建二維數(shù)組(矩陣)
可以使用numpy包來(lái)構(gòu)建二維數(shù)組,例如要構(gòu)建一個(gè)m行n列的初始化為0二維數(shù)組,可以編寫(xiě)程序:
m = 3 n = 4 mat = np.zeros((m, n)) print(mat)
結(jié)果為:
類似的:
構(gòu)建一個(gè)m行n列的初始化為0二維數(shù)組:
m = 3 n = 4 mat = np.ones((m, n)) print(mat)
構(gòu)建一個(gè)m行n列的初始化為0-1隨機(jī)數(shù)的二維數(shù)組:
m = 3 n = 4 mat = np.random.random((m, n)) print(mat)
構(gòu)建一個(gè)m行n列的初始化為1-11步長(zhǎng)為2的二維數(shù)組:
m = 2 n = 3 mat = np.arange(1, 12, 2).reshape(m, n) print(mat)
結(jié)果是:
構(gòu)建一個(gè)m行n列的空的二維數(shù)組:
m = 2 n = 3 mat = np.empty((m, n)) print(mat)
但注意,結(jié)果并不為空,而是一些極小的浮點(diǎn)數(shù),并沒(méi)有實(shí)際意義。
操作二維數(shù)組
如果你用的是list,那么操作二維數(shù)組和其他語(yǔ)言沒(méi)什么區(qū)別。
也是通過(guò)方括號(hào)下標(biāo)來(lái)獲取單個(gè)數(shù)據(jù),也是通過(guò)for循環(huán)迭代來(lái)遍歷二維數(shù)組。
這里不再贅述。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
熵值法原理及Python實(shí)現(xiàn)的示例詳解
熵值法也稱熵權(quán)法,是學(xué)術(shù)研究及實(shí)際應(yīng)用中的一種常用且有效的編制指標(biāo)的方法。本文就來(lái)和大家聊聊熵值法原理及Python實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02Python中byte字符串轉(zhuǎn)string的實(shí)現(xiàn)
本文主要介紹了Python中byte字符串轉(zhuǎn)string的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07深度剖析使用python抓取網(wǎng)頁(yè)正文的源碼
平時(shí)打開(kāi)一個(gè)網(wǎng)頁(yè),除了文章的正文內(nèi)容,通常會(huì)有一大堆的導(dǎo)航,廣告和其他方面的信息。本文的目的,在于說(shuō)明如何從一個(gè)網(wǎng)頁(yè)中提取出文章的正文內(nèi)容,而過(guò)渡掉其他無(wú)關(guān)的的信息。2014-06-06python常量折疊基礎(chǔ)知識(shí)點(diǎn)講解
在本篇文章里小編給大家整理的是一篇關(guān)于python常量折疊基礎(chǔ)知識(shí)點(diǎn)講解,對(duì)此有興趣的朋友可以跟著學(xué)習(xí)下。2021-02-02基于python實(shí)現(xiàn)語(yǔ)音錄入識(shí)別代碼實(shí)例
這篇文章主要介紹了如何通過(guò)python實(shí)現(xiàn)語(yǔ)音錄入識(shí)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Python3 列表,數(shù)組,矩陣的相互轉(zhuǎn)換的方法示例
這篇文章主要介紹了Python3 列表,數(shù)組,矩陣的相互轉(zhuǎn)換的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Python實(shí)現(xiàn)簡(jiǎn)單的ui界面的設(shè)計(jì)步驟(適合小白)
當(dāng)我們書(shū)寫(xiě)一個(gè)python程序時(shí),我們?cè)诳刂婆_(tái)輸入信息時(shí),往往多有不便,并且為了更加美觀且直觀的方式輸入控制命令,我們常常設(shè)計(jì)一個(gè)ui界面,這樣就能方便執(zhí)行相關(guān)功能,如計(jì)算器、日歷等界面,本博客是為了給ui設(shè)計(jì)的小白進(jìn)行講解,需要的朋友可以參考下2024-07-07