python - 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)
解决方案
如果您知道哪个索引具有特殊情况的行为,您可以这样做:
for i, x in enumerate(y):
if i == known_index:
g(x)
else:
f(x)
x
如果你不这样做,那么简单地检查每个谓词并没有错。
推荐阅读
- typescript - 有没有办法根据对象键在 TypeScript 上动态生成枚举?
- python - 总是得到 AUC = 0.5
- php - 合并同名列
- swift - 在没有任何按钮或滑动手势的情况下,如何在视图控制器之间几秒钟后创建一个 segue?
- php - PHP回调函数中的动态变量
- python - 使用具有两个“for”工作的 listcomp 展平列表?
- python - 如何将 numpy 数据预加载到像 io.BytesIO 这样的缓冲区中以使其可搜索?
- modal-dialog - 如何在页面加载时在模式对话框中显示表单?
- python - 为什么 random.sample 不能处理 numpy 数组,但 random.choices 可以?
- php - 如何使用 PHP 跟踪高分?(没有数据库,只有会话)