具有一个特定迭代的其他行为的Foreach循环

时间:2018-08-03 19:52:32

标签: python for-loop

我正在使用foreach循环遍历一个列表,我想做一些额外的事情来恰好是我遍历的x之一(以下代码中特别是cryoTemp)。我可以在循环的主体中添加一个简单的if语句来添加此功能,但是由于每次迭代都会对if语句进行评估,因此它在我的脑海中引发了一个潜意识的“错误代码”警报。 ,即使只会计算一次为true。有没有更聪明的,也许是更“ 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)

2 个答案:

答案 0 :(得分:2)

如果知道哪个索引具有特殊情况,则可以执行以下操作:

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

如果不这样做,那么简单地将每个x与谓词进行比较就没有问题。

答案 1 :(得分:0)

如果只需要修改列表中的一个元素,并且知道其值,则可以使用index函数,如下所示:

y = [...]
y[y.index(exact_element)] = desired_value