建網(wǎng)站新科網(wǎng)站建設(shè)泰州百度公司代理商
目錄
- 用np.array(a)將列表轉(zhuǎn)換為數(shù)組
- 列表轉(zhuǎn)數(shù)組的特殊情況(一)
- 列表轉(zhuǎn)數(shù)組的特殊情況(二)
- 針對(duì)子元素個(gè)數(shù)不一致的解決辦法
- 用a.tolist()函數(shù)將數(shù)組轉(zhuǎn)化為列表
在python的學(xué)習(xí)中,經(jīng)常會(huì)用到數(shù)組與列表的相互轉(zhuǎn)化,本文主要介紹下關(guān)于數(shù)組與列表轉(zhuǎn)化的問(wèn)題。
用np.array(a)將列表轉(zhuǎn)換為數(shù)組
程序顯示:
import numpy as np
import randoma=[[[random.randint(1,9) for x in range(5)]for i in range(3)]for j in range(2)]
print(type(a))
print(a)b=np.array(a)
print(type(b))
print(b)
輸出的結(jié)果為:
<class 'list'>[[[2, 2, 1, 3, 5], [9, 6, 3, 7, 2], [4, 9, 7, 2, 5]], [[6, 4, 9, 4, 9], [1, 4, 7, 2, 5], [2, 6, 3, 6, 7]]]<class 'numpy.ndarray'>[[[2 2 1 3 5][9 6 3 7 2][4 9 7 2 5]][[6 4 9 4 9][1 4 7 2 5][2 6 3 6 7]]]
由上面的結(jié)果可以看出很順利就完成了列表到數(shù)組的轉(zhuǎn)化。
列表轉(zhuǎn)數(shù)組的特殊情況(一)
import numpy as np
import randomf=[]
e=[random.randint(1,9) for x in range(5)]
f.append(np.array(e))
g=[random.randint(1,9) for x in range(5)]
f.append(g)
print(f)
f1=np.array(f, dtype=object)
print("轉(zhuǎn)為數(shù)組后:")
print(f1)
結(jié)果顯示為:
[array([7, 3, 7, 4, 2]), [7, 9, 8, 1, 5]]轉(zhuǎn)為數(shù)組后:[[7 3 7 4 2][7 9 8 1 5]]
可以看出原來(lái)程序中的f是既含有數(shù)組類(lèi)型,又含有列表類(lèi)型。由于數(shù)組和列表的長(zhǎng)度是一樣的,所以可以順利將f的所有數(shù)據(jù)全部轉(zhuǎn)化為數(shù)組型,得到的f1。
說(shuō)到這里,那么就會(huì)想到,如果一個(gè)列表中含有多個(gè)子列表,子列表中的數(shù)據(jù)量不完全相同,那么結(jié)果會(huì)怎樣呢?
列表轉(zhuǎn)數(shù)組的特殊情況(二)
import numpy as np
import randomf=[]
e=[random.randint(1,9) for x in range(5)]
f.append(np.array(e))
# 此處做了修改
g=[random.randint(1,9) for x in range(4)]
f.append(g)
print(f)
f1=np.array(f, dtype=object)
print("轉(zhuǎn)為數(shù)組后:")
print(f1)
print(len(f))
這次運(yùn)行后得到的顯示為:
[array([7, 5, 3, 9, 4]), [8, 7, 9, 1]]轉(zhuǎn)為數(shù)組后:[array([7, 5, 3, 9, 4]) list([8, 7, 9, 1])]2
我們可以發(fā)現(xiàn),運(yùn)行的結(jié)果雖然沒(méi)有問(wèn)題,但是得到的新的f1卻不是我們想要的,我們希望f1里面包含9個(gè)元素,但是通過(guò)len(f1)可以看到只有2個(gè)元素了。
由此可以看到,要想通過(guò)np.array函數(shù)將上面程序中的情況轉(zhuǎn)化為數(shù)組,需要保證每個(gè)f中的每個(gè)子元素中含的子元素個(gè)數(shù)相同。
針對(duì)子元素個(gè)數(shù)不一致的解決辦法
import numpy as np
import randomf=[]
e=[random.randint(1,9) for x in range(5)]
f.append(np.array(e))
# 此處做了修改
g=[random.randint(1,9) for x in range(4)]
f.append(g)
print(f)
f1=np.array(f, dtype=object)
print("轉(zhuǎn)為數(shù)組后:")
print(f1)
print(len(f))print("重新轉(zhuǎn)化")
f1=f1[0].tolist()+f1[1]
print(f1)
print(len(f1))
運(yùn)行后的結(jié)果顯示:
[array([5, 8, 6, 4, 5]), [1, 4, 3, 6]]
轉(zhuǎn)為數(shù)組后:
[array([5, 8, 6, 4, 5]) list([1, 4, 3, 6])]
2
重新轉(zhuǎn)化
[5, 8, 6, 4, 5, 1, 4, 3, 6]
9
可以看出這次成功得到想要的結(jié)果了。
由于在進(jìn)行多重列表轉(zhuǎn)數(shù)組時(shí)會(huì)因?yàn)樽恿斜碇性貍€(gè)數(shù)不一樣從而導(dǎo)致出錯(cuò),所以在此進(jìn)行一下總結(jié)。
用a.tolist()函數(shù)將數(shù)組轉(zhuǎn)化為列表
通過(guò)上面的例子就可以看到,博主將f1中的第一個(gè)子元素(是一個(gè)數(shù)組)轉(zhuǎn)化為了列表。
在此再用一個(gè)程序來(lái)說(shuō)明:
import numpy as np
import randoma=[random.randint(1,9) for x in range(5)]
a_array=np.array(a)
print(a_array)
print(type(a_array))
a_list=(a_array).tolist()
print(a_list)
print(type(a_list))
結(jié)果顯示為:
[6 1 9 3 1]
<class 'numpy.ndarray'>
[6, 1, 9, 3, 1]
<class 'list'>