避免python中的循环

2024-05-14 00:45:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道在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. 初始化覆盖所有脂质和
  2. 确定它们是否被计算为U或向下
  3. 为适当的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

Tags: inforcdrangeclasshshnhd
2条回答

循环不是个坏主意。只是循环密集型代码可能会慢一些。但它并不是特定于循环的,只是Python在总体上不如其他一些语言快。如果循环是算法中最自然的表达式,我建议您不要避免循环。如果您的代码比预期或需要的要慢,那么请寻找优化它的方法(首先是分析)。

关于维基百科算法分析的{a1}可能对你有用。

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

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

然而,如注释中所述,这与为循环编写没有区别,因为列表理解是语法上的糖。如果它在可读性和维护性方面更方便的话,就可以使用它。

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

相关问题 更多 >