首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免python中的循环

避免python中的循环
EN

Stack Overflow用户
提问于 2012-01-15 12:22:45
回答 2查看 14.9K关注 0票数 3

我知道循环在python中是个坏主意,我应该避免它们。

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

我有一张名叫脂质的清单:

代码语言:javascript
复制
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添加值

我怎样才能避免,至少,第一个循环?

1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-15 12:27:04

循环并不是个坏主意。只是循环密集的代码可能很慢。但是它并不是特定于循环的,只是Python在一般情况下没有其他语言那么快。我建议您不要避免循环,如果它们是最自然的表达您的算法。如果您的代码比您预期的或需要的要慢,那么就寻找优化它的方法(首先是分析)。

维基百科算法分析的文章可能对你有用。

票数 11
EN

Stack Overflow用户

发布于 2012-01-15 12:33:45

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

代码语言:javascript
复制
hs = [[h() for i in range(8)] for j in range(8)]

但是,正如注释中所指出的,这与为循环编写没有什么不同,因为列表理解是语法糖。如果它在可读性和维护方面更方便的话,就使用它。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8869579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档