【问题标题】:Creating New Array when Second Array is > 0当第二个数组 > 0 时创建新数组
【发布时间】:2015-07-13 16:07:05
【问题描述】:

我正在运行 Python 2.7。

我有一个名为“高度”的数组,包含以下几点

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

【问题讨论】:

  • [j for i,j in enumerate(altitude) if arming_pin[i]]

标签: python arrays python-2.7


【解决方案1】:

您可以在列表理解中使用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])

【讨论】:

  • 谢谢!像魅力一样工作!
  • @AndrewReardon 欢迎,接受我的回答怎么样?;)
【解决方案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]

【讨论】:

    【解决方案3】:
    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]]
    

    night shade 的注释现在更简洁了 [j for i,j in enumerate(altitude) if arming_pin[i]]

    【讨论】:

      【解决方案4】:

      这是我的解决方案,旨在让不习惯列表理解的人易于理解。

      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]
      

      【讨论】:

        猜你喜欢
        • 2017-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-11
        • 2023-03-18
        • 2021-12-05
        相关资源
        最近更新 更多