[英]Replace bad values in list with values at same indexes in another list
我有兩個列表,分別是z
和w
:
z = [323, 493, 245, 542, 352, 463, 352]
w = [300, -9999, 4343, 320, -9999, -9999, -9999]
現在,我需要通過將所有-9999
替換為相應的z
值來更新w
的值。 如果我打印w
,則值將為
w = [300, 493, 4343, 320, 352, 463, 352]
這是我得到的代碼:
w[w == -9999] = z
但是我明白了
w = [[300, 493, 4343, 320, 352, 463, 352], -9999, 4343, 320, -9999, -9999, -9999]
z = [323, 493, 245, 542, 352, 463, 352]
w = [300, -9999, 4343, 320, -9999, -9999, -9999]
for index,value in enumerate(w):
if value == -9999:
w[index] = z[index]
輸出量
[300, 493, 4343, 320, 352, 463, 352]
可以在列表理解中應用相同的想法
>>> [z[index] if value == -9999 else w[index] for index, value in enumerate(w)]
[300, 493, 4343, 320, 352, 463, 352]
由於沒有真正的理由遍歷兩個列表或將它們壓縮在一起,因此您可以這樣做-這樣可以更快:
def replace_values(w, z):
return [z[num] if x == -9999 else x for num, x in enumerate(w)]
您可以使用map來做到這一點:
>>> z = [323, 493, 245, 542, 352, 463, 352]
>>> w = [300, -9999, 4343, 320, -9999, -9999, -9999]
>>> map(lambda t: t[0] if t[1]==-9999 else t[1], zip(z,w))
[300, 493, 4343, 320, 352, 463, 352]
Numpy的自然用法:
>>> import numpy as np
>>> z = np.array([323, 493, 245, 542, 352, 463, 352])
>>> w = np.array([300, -9999, 4343, 320, -9999, -9999, -9999])
>>> idx=np.where(w==-9999)
>>> w[idx]=z[idx]
>>> w
array([ 300, 493, 4343, 320, 352, 463, 352])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.