我理解循环在python中是一个坏主意,我应该避免它们。
好吧,我有几个我想避免的。
我有一个名为lipid的东西列表:
class bead:
x = 0
y = 0
z = 0
LID = 0
t = 0
class lipid:
h = bead()
b = bead()
t = bead()
LID = 0
我正在做以下(代码如下):
h
的2d数组,遍历所有脂质和U
还是h
我怎样才能避免至少第一次循环?
1
class h:
cU = 0
cD = 0
hU = 0
hD = 0
h = 0
for i in range(0,8):
hs.append([])
for j in range(0,8):
index = (i,j)
hn = h()
hs[i].append(hn)
2和3:
for LID in lipids:
l = lipids[LID]
up = l.h.z > l.t.z
X = (int)(l.b.x*8/L)
Y = (int)(l.b.y*8/L)
Z = (l.b.z)*0.5
if up:
hs[X][Y].hU += Z
hs[X][Y].cU += 1
else:
hs[X][Y].hD += Z
hs[X][Y].cD += 1
答案 0 :(得分:7)
循环并不是一个坏主意。只是循环密集型代码可能变慢。但它并不特定于循环,只是Python不像其他语言那么快。我建议你不要避免循环,如果它们是你的算法最自然的表达。如果您的代码变得比您期望或需要的慢,那么寻找优化它的方法(分析,开始)。
维基百科中的算法分析article可能对我有用。
答案 1 :(得分:1)
如何使用列表推导创建二维数组的示例如下:
hs = [[h() for i in range(8)] for j in range(8)]
然而,正如评论中所指出的,这与写循环没有什么不同,因为列表推导是语法糖。只要在可读性和维护方面更方便,就使用它。
注意:正如评论所指出的,列表推导的另一个好处是它们通常比for
循环和map
函数提供更好的性能。