【问题标题】:What is the 'python version' of array[i]?array[i] 的“python 版本”是什么?
【发布时间】:2021-05-05 08:54:26
【问题描述】:

我正在学习 Python 并尝试一次比较多个数组/列表的元素,我的数组是 Numpy 数组(我猜?),就像我在 the following 创建它们时所做的那样,答案提到输出为 numpy数组

我总共有 3 个长度为 40 的数组,我想做的是遍历它们并检查同一索引处的元素是否相等,在 Java 等编程语言中,我可以使用以下方法轻松完成此操作:

for (int i=0;i<40; i++)
   if(array1[i]==array2[i]==array3[i] 
     //do whatever

但是我在执行此操作时遇到了麻烦,因为有关遍历数组的教程将是这样的:

for x in arr:
  \\do work

没有参考索引,任何帮助将不胜感激

更新:为了更清楚,我使用链接的答案将带有字符串的 csv 文件导入到 numpy 数组中,所以我的数组元素是字符串

这是 print(array) 的输出,我有 3 个

【问题讨论】:

  • for i, x in enumerate(arr): 是获取索引和项目的好方法。如果您只需要索引for i in range(len(arr)):,但如果您只想迭代一个list(这就是您所谓的“数组”的真实名称),那将被认为是“unpythnic”。
  • 但更好的实现将是for ar1element, ar2element, ar3element in zip(array1, array2, array3)
  • 当您尝试将how does a for loop work in python 放入搜索引擎时发生了什么?或者寻找并遵循任何类型的教程?或者远程类似的东西?如果你不明白如何做这样基本的事情,你为什么要尝试使用像 Numpy 这样复杂的库?
  • 您似乎知道iterate 这个词,并且您知道您想要做的是并行遍历 Numpy 数组。因此,也许您可​​以在此基础上尝试更量身定制的搜索。

标签: python arrays numpy


【解决方案1】:

这应该适合你:

for x,y,z in zip(array1,array2,array3):
    if(x==y and x==z):
        #Do Something

【讨论】:

  • 我得到以下信息:“ValueError:具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all()”如果数组有字符串作为元素这很重要
  • 请更好地描述您对array1array2array3 的期望。
  • 查看帖子更新以获得更多说明
  • 然后将if语句改为:if(np.array_equal(x,y) and np.array_equal(x,z)):
【解决方案2】:

可以通过枚举列表获取索引。

for idx, val in enumerate(arr):
    print(idx, val)

【讨论】:

    【解决方案3】:

    只需使用zip() 函数。

    num1 = [1, 2, 3]
    num2 = [3, 4, 35]
    num3 = [21, 24, 43]
    
    for n1, n2, n3 in zip(num1, num2, num3):
      print(n1, n2, n3)
    

    输出:

    1 3 21
    2 4 24
    3 35 43
    

    【讨论】:

    • 这个方法不起作用,正如我在另一条评论中所说的那样,我得到以下信息:“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或.all()" 如果重要的话,数组将字符串作为元素
    【解决方案4】:
    import numpy as np    
    where_equal = np.where(np.logical_and(array1==array2, array2==array3))
    for i,j in zip(*where_equal):
        #do stuff... for example
        print(array1[i,j])
    

    https://numpy.org/doc/stable/reference/generated/numpy.logical_and.html

    https://numpy.org/doc/stable/reference/generated/numpy.where.html

    zip(*where_equal) 解压缩 np.where 返回的索引元组,然后压缩成一个可迭代对象。

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 2012-09-30
      • 2018-12-24
      • 1970-01-01
      • 2015-12-21
      • 2016-06-27
      • 1970-01-01
      • 2013-07-19
      • 2017-10-16
      相关资源
      最近更新 更多