【问题标题】:Loop through two Matrixes in the same for loop在同一个for循环中循环两个矩阵
【发布时间】:2023-03-04 16:31:01
【问题描述】:

我需要遍历两个矩阵,但是我不能使用 Numpy,我被要求不要使用它。

altura_mar = [[1,5,7],
              [3,2,31]]
precipitacion_anual = [[10,5,70],
                       [5,7,8]]
for marIndex, anualIndex in zip(altura_mar, precipitacion_anual):
   #some code

所以,我的问题是,如果我尝试将 zip 与矩阵一起使用,则 zip 仅适用于一个列表而不是二维列表,它会给出以下错误:“ValueError:要解包的值太多(预期为 2)”

现在我正在考虑两种可能的解决方案:

  1. 将多维列表制作成单个列表,如 altura_mar = [1,5,7,3,2,31] 但我该怎么做?
  2. 在嵌套的 for 循环中使用 2 个矩阵(我不知道,但也许你们可以在这里提供帮助)。

【问题讨论】:

  • 你从哪里得到错误?是在some code吗?

标签: python-3.x matrix


【解决方案1】:

由于是二维列表,所以可以应用zip两次:

>>> for a,b in zip(altura_mar, precipitacion_anual):
...     for c,d in zip(a,b):
...             print(c,d)
...
1 10
5 5
7 70
3 5
2 7
31 8

但是,当嵌套深度可变时,此解决方案无法很好地扩展。

【讨论】:

    【解决方案2】:

    我认为最基本的解决方案是最好的,只是迭代索引而不是嵌套的 zip 语句(参见this 帖子)

    >>> for i in range(len(altura_mar)):
    ...     for j in range(len(altura_mar[i])):
    ...         print(altura_mar[i][j], precipitacion_anual[i][j])
    ... 
    1 10
    5 5
    7 70
    3 5
    2 7
    31 8
    

    【讨论】:

      【解决方案3】:

      假设您想将110 配对而不是将[1,5,7][10, 5, 70] 配对,那么除了其他完美的答案之外,您还可以使用列表理解生成器,例如:

      altura_mar = [[1,5,7], [3,2,31]]
      altura_mar_flat = (cell for row in altura_mar for cell in row)
      
      precipitacion_anual = [[10,5,70], [5,7,8]]
      precipitacion_anual_flat = (cell for row in precipitacion_anual for cell in row)
      
      for marIndex, anualIndex in zip(altura_mar_flat, precipitacion_anual_flat):
          print(marIndex, anualIndex)
      

      这也给你:

      1 10
      5 5
      7 70
      3 5
      2 7
      31 8
      

      【讨论】:

      • 那是漂亮的代码,我真的很喜欢列表理解 :,) 这确实是扁平化多维列表的好方法!
      猜你喜欢
      • 2017-11-22
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多