【发布时间】: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] 不是静态值,它引用i 和j 之类的东西
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