【问题标题】:Saving index values with non-zero elements in Python在 Python 中使用非零元素保存索引值
【发布时间】:2020-12-26 10:15:15
【问题描述】:

我有一个包含值的一维数组,我正在尝试使用 for 循环来识别与非零元素关联的索引值。

对于下面的代码,non_zero_elements 应该包含值 0、1 和 4,但我得到的是 [1, 0, 0, 4, 0]。

我尝试引用一个类似的线程 (Finding Non-Zero Values/Indexes in Numpy),但无法识别代码中的错误。

a = [1,2,0,0,4,0]
non_zero_elements = []
i = 0
for i in a:
    if a[i] != 0:
        non_zero_elements.append(i)
        print('The value',a[i],'in index',i,'is a non-zero element.')
        i = i + 1
print('Non-zero elements: ',non_zero_elements)

【问题讨论】:

    标签: python arrays loops for-loop matrix


    【解决方案1】:

    解决此问题的一种简单方法是对enumerate 进行列表推导,它为您提供索引和值,允许您过滤非零值:

    a = [1,2,0,0,4,0]
    non_zero_elements = [i for i, v in enumerate(a) if v != 0]
    print(non_zero_elements)
    

    输出:

    [0, 1, 4]
    

    【讨论】:

      【解决方案2】:

      我认为您尝试这样做的方式是迭代索引而不是列表 a 的元素。

      a = [1,2,0,0,4,0]
      non_zero_elements = []
      i = 0
      for i in range(0,len(a)):
          if a[i] != 0:
              non_zero_elements.append(i)
              print('The value',a[i],'in index',i,'is a non-zero element.')
              i = i + 1
      print('Non-zero elements: ',non_zero_elements)
      

      【讨论】:

      • 非常感谢您的反馈,很准确。
      【解决方案3】:

      for i in a: in this i 是 a 中项目的值,而不是它们的索引。

      您可以使用for i, v in enumerate(a): 遍历列表,其中i 将成为索引,v 将成为该索引处的值。

      或者,您可以使用for i in range(len(a)): 使用索引进行迭代并访问a[i]。

      【讨论】:

      • 谢谢你,投降者!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 2014-04-30
      • 2021-01-26
      相关资源
      最近更新 更多