当第二个数组是>时创建新数组0

时间:2015-07-13 16:07:05

标签: python arrays python-2.7

我正在运行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中创建这个新数组?使用某种条件语句?

4 个答案:

答案 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]