![](/img/trans.png)
[英]Is there a more Pythonic way to write this? Filling multiple lists to desired length
[英]A more pythonic way of looping through multiple lists while modifying some of them
我将尝试描述我的问题的核心:我有一个信号列表,每个信号都有自己的别名,以及一个包含别名、值和值质量(质量可以是 0、1 或2)。 我正在尝试遍历信号,在数据集中找到它的别名,并更新每个信号以给定质量写入的次数的计数器。 我建了一本字典
dati = {'signals': [signal1, signal2, ...], 'alias': [alias1, alias2, ...], 'nGOOD': [0, 0, ...], 'nBAD': [0, 0, ...], 'nFREEZE': [0, 0, ...]}
我最终编写了这样的代码:
for i in range(0, len(dati['signals'])):
#I extract the "quality" information using the alias
quality = extracted using(dati['alias'][i])
######
if quality == '0':
dati['nGOOD'][i] += 1
elif quality == '1':
dati['nBAD'][i] += 1
elif quality == '2':
dati['nFREEZE'][i] += 1
else:
raise Exception('Qualità sconosciuta')
这段代码有效,但我明白使用索引并不是最 Pythonic 的原因。 我知道我可以使用 zip() 来遍历不同的列表,但是我得到了无法修改的元组。 有一个更好的方法吗?
感谢您的时间。
@Wups:代码的最终输出是信号名称和质量计数,所以我需要保持信息链接。
@Pranav Hosangadi:如果我理解正确,使用 enumerate 会更简洁一些,但这仍然不是我所希望的。 我仍然需要通过索引调用它们来修改质量。 我曾希望有一种方法可以在循环期间访问它们。
您可以使用enumerate()
来避免索引alias
列表。 但是您仍然需要使用索引来增加值。
for i, alias in enumerate(dati['alias']):
quality = extract quality from alias
if quality == '0':
dati['nGOOD'][i] += 1
elif quality == '1':
dati['nBAD'][i] += 1
elif quality == '2':
dati['nFREEZE'][i] += 1
else:
raise Exception('Qualità sconosciuta')
如果您有字典列表,事情会更容易。
dati = {
{'signal': signal1, 'alias': alias1, 'nGOOD': 0, 'nBAD': 0, 'nFREEZE': 0},
{'signal': signal2, 'alias': alias2, 'nGOOD': 0, 'nBAD': 0, 'nFREEZE': 0},
...
}
for datum in dati:
quality = extract quality from datum['alias']
if quality == '0':
datum['nGOOD'] += 1
elif quality == '1':
datum['nBAD'] += 1
elif quality == '2':
datum['nFREEZE'] += 1
else:
raise Exception('Qualità sconosciuta')
通常,将相关属性放在一起可以简化为每个属性设置单独数组的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.