python中如何對列表list做相同的處理

問題描述

在寫python代碼過程中我們常常可能會遇到這樣一種情況,要對一個list中的每個元素做同樣的操作。比如我們讀到一組數據,需要做比例尺縮放,或者做單位換算,這就需要對list的每一個元素操作。例如現在我們有一組數據,座標數值單位是米,而我們需要的是釐米,這就需要釐米的每個元素乘以100。數據情況如下:
buliding=[[0,0],[0,10],[3,10],[3,3],[6,3],[6,11],[8,11],[8,0]]

解決方法

方法有很多,我們今天來說三個。

循環遍歷每個元素

循環,對每一個元素做處理,注意不可以進行刪除操作。代碼如下:

buliding=[[0,0],[0,10],[3,10],[3,3],[6,3],[6,11],[8,11],[8,0]]
print('buliding:',buliding)
for i in range(len(buliding)):
    buliding[i]=[buliding[i][0]*100,buliding[i][1]*100]
print('after prcoessing, buliding:', buliding)
print(buliding)

運行結果如下:

buliding: [[0, 0], [0, 10], [3, 10], [3, 3], [6, 3], [6, 11], [8, 11], [8, 0]]
after prcoessing, buliding: [[0, 0], [0, 1000], [300, 1000], [300, 300], [600, 300], [600, 1100], [800, 1100], [800, 0]]

可以看到,結果正確。但是這種方法效率比較低。

使用map函數

使用map函數對每個元素處理,但是map函數返回的是一個map類型,所以要想查看值需要把它再轉換爲list。代碼如下

print('buliding:',buliding)
def process_bld(x):
    return [x[0]*100,x[1]*100]
bld_map=map(process_bld,buliding)
bld=list(bld_map)
print('after prcoessing, buliding:', bld)

運行發現,結果也正確。

使用numpy處理

numpy對列表或者矩陣處理非常方便,把列表轉換成numpy再處理是一個明智的做法。list 轉 numpy 用的是
np.array(a),而ndarray 轉 list用的是a.tolist()。代碼如下

import numpy as np
buliding=[[0,0],[0,10],[3,10],[3,3],[6,3],[6,11],[8,11],[8,0]]
print('buliding:',buliding)
np_bld=np.array(buliding)
np_bld_process=np_bld*100
bld=np_bld_process.tolist()
print('after prcoessing, buliding:', bld)

可以看到,用numpy非常的方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章