首页 > 解决方案 > Foreach 循环具有针对特定迭代的附加行为

问题描述

我正在使用 foreach 循环迭代一个列表,并且我想对我迭代的一个列表做一些额外的事情x(特别cryoTemp是在下面的代码中)。我可以在循环体中添加一个简单的语句来添加这个功能if,但是它在我的脑海中引发了一个潜意识的“坏代码”警报,因为该if语句将在每次迭代时被评估,即使它只会评估一次为真. 有没有更聪明,也许更“Pythonic”的方式来做到这一点?

for p in self.params:
    < get parameter p from server >
    < parse response >
    log_in_redis_and_mysql(p, value)

    # log cooling rate based on cryoTemp value
    if p == 'cryoTemp':
        self.pastCryoTemps.append(value)
        # calculate average of queue when it fills up then remove the oldest (first) element
        if (len(self.pastCryoTemps) == 4):
            differences = []
            for i in range(len(self.pastCryoTemps) - 1):
                differences.append(-(self.pastCryoTemps[i] - self.pastCryoTemps[i + 1]))
            average = sum(differences) / len(differences)
            log_in_redis_and_mysql('cooling_rate', average)
            self.pastCryoTemps.pop(0)

标签: pythonfor-loop

解决方案


如果您知道哪个索引具有特殊情况的行为,您可以这样做:

for i, x in enumerate(y):
    if i == known_index:
        g(x)
    else:
        f(x)

x如果你不这样做,那么简单地检查每个谓词并没有错。


推荐阅读