【问题标题】:Python converting nested for loops to comprehension for initializationPython将嵌套的for循环转换为对初始化的理解
【发布时间】:2019-05-22 17:03:42
【问题描述】:

我是 python 新手,我正在尝试更改这里的嵌套 for 循环:

sumArray = [0]*len(possible[0])
for i in range(len(possible)):
    for j in range(len(possible[i])):
        sumArray[j] += possible[i][j]

进入循环理解,因为我听说它更快。我不太确定应该怎么做,因为我看到的所有关于循环理解的教程都只涉及使用静态值进行初始化。由于possible[i][j] 不是静态值,它引用ij 之类的东西

sumArray = [[sumArray[j] + possible[i][j] for i in range(len(possible))] for j in range(len(possible[i]))]

在定义之前给我关于引用 i 的错误。

【问题讨论】:

  • 如果您是 Python 新手,也许现在不是将 double for 循环更改为 list complehension 的时候。写一个星期后你就很难阅读复杂的代码了。
  • 我对编程并不陌生,我将它从 Java 转换过来,这是你可以做到这一点的唯一方法。我可以理解 Python,但有很多语法上的细微差别我还没有真正掌握。另外,我转换的程序太慢了,因为我到处都是这样的for循环
  • 如果你正在做一些繁重的数学计算或处理列表中的大量数字,使用 numpy 会快得多;就像sumArray = np.sum(possible, axis=1).
  • 您的代码有效吗? 可能包含什么?您应该首先在大型 一维 列表上比较 list comprehension vs. 迭代方式(在速度方面),并检查它是否真的更快.另外,看看[SO]: How to create a Minimal, Complete, and Verifiable example (mcve)
  • 是的,我的代码有效。 possible 是一个元组的元组,其中包含网格中行的可能值

标签: python multidimensional-array


【解决方案1】:

sumArray = np.sum(possible, axis=1)

是我一直在寻找的。谢谢

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2021-02-03
    • 2020-11-26
    • 1970-01-01
    • 2021-12-30
    • 2021-09-02
    相关资源
    最近更新 更多