我正在运行Python 2.7。
我有一个名为" altitude"有以下几点
[0,1,2,3,4,5,6,7,8,9]
我还有一个名为" arming_pin"
的数组[0,0,0,0,0,0,1,1,1,1]
在我的程序中,当arming_pin大于零时,我想使用"海拔高度"当"arming_pin"
= = 0时,数组数据点并忽略先前的点。我想调用这个新数组"altitude_new"
。 " altitude_new"数组看起来像:
[6,7,8,9]
如何在python中创建这个新数组?使用某种条件语句?
答案 0 :(得分:3)
您可以在列表推导中使用zip
函数来过滤您的数组:
>>> f=[0,1,2,3,4,5,6,7,8,9]
>>> sec=[0,0,0,0,0,0,1,1,1,1]
>>>
>>> [i for i,j in zip(f,sec) if j]
[6, 7, 8, 9]
您还可以使用itertools.compress
在处理更大的列表时效率更高:
>>> from itertools import compress
>>> list(compress(f,sec))
[6, 7, 8, 9]
或使用numpy.compress
:
>>> import numpy as np
>>> np.compress(sec,f)
array([6, 7, 8, 9])
答案 1 :(得分:2)
您也可以这样使用compress method from itertools模块:
>>> import itertools as it
>>> l1 = [0,1,2,3,4,5,6,7,8,9]
>>> l2 = [0,0,0,0,0,0,1,1,1,1]
>>> list(it.compress(l1,l2))
[6, 7, 8, 9]
答案 2 :(得分:0)
altitude_new=[]
for i in range(len(arming_pin)):
if arming_pin[i] == 1:
altitude_new.append(altitude[i])
一行列表理解:
altitude_new = [altitude[i] for i in range(len(arming_pin)) if arming_pin[i]]
夜间阴影的评论现在更简洁[j for i,j in enumerate(altitude)如果arming_pin [i]]
答案 3 :(得分:0)
这是我的解决方案,对于不习惯列表理解的人来说,这是易于理解的。
altitude = [0,1,2,3,4,5,6,7,8,9]
arming_pin = [0,0,0,0,0,0,1,1,1,1]
altitude_new = []
idx = 0 # track the indices
for item in arming_pin:
if item > 0:
altitude_new.append(altitude[idx])
idx += 1
print altitude_new
>>> [6, 7, 8, 9]