避免在python中循环

时间:2012-01-15 12:22:45

标签: python loops

我理解循环在python中是一个坏主意,我应该避免它们。

好吧,我有几个我想避免的。

我有一个名为lipid的东西列表:

class bead:
    x = 0
    y = 0
    z = 0
    LID = 0
    t = 0

class lipid:
    h = bead()
    b = bead()
    t = bead()
    LID = 0

我正在做以下(代码如下):

  1. 初始化h的2d数组,遍历所有脂质和
  2. 确定它们是计为U还是
  3. 将值添加到相应的h
  4. 我怎样才能避免至少第一次循环?

    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
    

2 个答案:

答案 0 :(得分:7)

循环并不是一个坏主意。只是循环密集型代码可能变慢。但它并不特定于循环,只是Python不像其他语言那么快。我建议你不要避免循环,如果它们是你的算法最自然的表达。如果您的代码变得比您期望或需要的慢,那么寻找优化它的方法(分析,开始)。

维基百科中的算法分析article可能对我有用。

答案 1 :(得分:1)

如何使用列表推导创建二维数组的示例如下:

hs = [[h() for i in range(8)] for j in range(8)]

然而,正如评论中所指出的,这与写循环没有什么不同,因为列表推导是语法糖。只要在可读性和维护方面更方便,就使用它。

注意:正如评论所指出的,列表推导的另一个好处是它们通常比for循环和map函数提供更好的性能。