南京飛酷網(wǎng)絡(luò)帶你了解:Python列表 VS Numpy數(shù)組
2024-06-04 加入收藏
相同點(diǎn)
Python列表和NumPy數(shù)組都是在Python編程語(yǔ)言中使用的基本數(shù)據(jù)結(jié)構(gòu)。
它們都可以存儲(chǔ)和訪問(wèn)多個(gè)元素,并支持在序列中進(jìn)行索引、切片和迭代等操作。
此外,它們還都可以通過(guò)循環(huán)和條件語(yǔ)句來(lái)處理數(shù)據(jù),以及使用函數(shù)和方法對(duì)它們進(jìn)行修改和轉(zhuǎn)換。
它們都可以通過(guò)函數(shù)和方法進(jìn)行排序、合并和拆分等常見(jiàn)操作。
import numpy as np
# 創(chuàng)建一個(gè)Python列表和NumPy數(shù)組
my_list = [1, 2, 3, 4, 5]
my_array = np.array([1, 2, 3, 4, 5])
# 打印列表和數(shù)組
print("Python列表:", my_list)
print("NumPy數(shù)組:", my_array)
# 結(jié)果
# Python列表: [1, 2, 3, 4, 5]
# NumPy數(shù)組: [1 2 3 4 5]
# 訪問(wèn)列表和數(shù)組中的元素
print("列表第一個(gè)元素:", my_list[0])
print("數(shù)組第一個(gè)元素:", my_array[0])
# 結(jié)果
# 列表第一個(gè)元素: 1
# 數(shù)組第一個(gè)元素: 1
# 使用循環(huán)對(duì)列表和數(shù)組進(jìn)行迭代
for element in my_list:
print("Python列表的元素:", element)
for element in my_array:
print("NumPy數(shù)組的元素:", element)
# 結(jié)果
# Python列表的元素: 1
# Python列表的元素: 2
# Python列表的元素: 3
# Python列表的元素: 4
# Python列表的元素: 5
# NumPy數(shù)組的元素: 1
# NumPy數(shù)組的元素: 2
# NumPy數(shù)組的元素: 3
# NumPy數(shù)組的元素: 4
# NumPy數(shù)組的元素: 5
# 使用內(nèi)置函數(shù)和方法對(duì)列表和數(shù)組進(jìn)行操作
print("列表的總和:", sum(my_list))
print("數(shù)組的總和:", np.sum(my_array))
# 結(jié)果
# 列表的總和: 15
# 數(shù)組的總和: 15
不同點(diǎn)
數(shù)據(jù)類型
NumPy數(shù)組是一個(gè)由同類型數(shù)據(jù)元素組成的多維數(shù)組;
Python列表則可以包含任何類型的對(duì)象,包括數(shù)字、字符串和其他Python對(duì)象。
內(nèi)存使用
NumPy數(shù)組在內(nèi)存中存儲(chǔ)為連續(xù)的塊,因此比Python列表更有效地使用內(nèi)存;
NumPy數(shù)組可以使用原地操作來(lái)修改其內(nèi)容,這意味著它們可以在不創(chuàng)建新數(shù)組的情況下執(zhí)行許多操作。
import numpy as np
import sys
# 創(chuàng)建一個(gè)包含10000個(gè)整數(shù)的Python列表
my_list = list(range(10000))
# 創(chuàng)建一個(gè)包含10000個(gè)整數(shù)的NumPy數(shù)組
my_array = np.array(range(10000))
# 查看Python列表和NumPy數(shù)組在內(nèi)存中所占用的空間
print("Python列表占用內(nèi)存:", sys.getsizeof(my_list))
print("NumPy數(shù)組占用內(nèi)存:", my_array.nbytes)
# 輸出
# Python列表占用內(nèi)存:80056
# NumPy數(shù)組占用內(nèi)存:40000
算術(shù)操作
NumPy數(shù)組支持矢量化操作和廣播,這使得對(duì)整個(gè)數(shù)組執(zhí)行算術(shù)和數(shù)學(xué)操作更為簡(jiǎn)單和高效;
Python列表需要使用循環(huán)來(lái)執(zhí)行這些操作。
import numpy as np
# 使用NumPy數(shù)組進(jìn)行加法
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
print(c) # 輸出 [5 7 9]
# 使用Python列表進(jìn)行加法
a = [1, 2, 3]
b = [4, 5, 6]
c = []
for i in range(len(a)):
c.append(a[i] + b[i])
print(c) # 輸出 [5, 7, 9]
運(yùn)行速度
NumPy數(shù)組是經(jīng)過(guò)優(yōu)化的C代碼實(shí)現(xiàn)的,因此它們通常比Python列表更快。
對(duì)于大型數(shù)據(jù)集和復(fù)雜的計(jì)算,使用NumPy數(shù)組通常會(huì)更有效率。
相互轉(zhuǎn)換
Python列表轉(zhuǎn)換為NumPy數(shù)組
import numpy as np
# 創(chuàng)建一個(gè)Python列表
my_list = [1, 2, 3, 4, 5]
# 將Python列表轉(zhuǎn)換為NumPy數(shù)組
my_array = np.array(my_list)
# 輸出轉(zhuǎn)換后的NumPy數(shù)組
print(my_array)
# 輸出
# [1 2 3 4 5]
NumPy數(shù)組轉(zhuǎn)換為Python列表
import numpy as np
# 創(chuàng)建一個(gè)NumPy數(shù)組
my_array = np.array([1, 2, 3, 4, 5])
# 將NumPy數(shù)組轉(zhuǎn)換為Python列表
my_list = my_array.tolist()
# 輸出轉(zhuǎn)換后的Python列表
print(my_list)
# 輸出
# [1, 2, 3, 4, 5]
總結(jié)
如果需要進(jìn)行科學(xué)計(jì)算、數(shù)據(jù)分析和數(shù)值處理,NumPy是一種強(qiáng)大的工具;
如果只需要簡(jiǎn)單地存儲(chǔ)和操作數(shù)據(jù),Python列表則是一種更為通用和靈活的選擇。