优雅的解决方案,以嵌套的else-if链
在Python中,是否有一个更优雅的解决方案,以下嵌套else-if链?优雅的解决方案,以嵌套的else-if链
if interval == 1:
a += 1
else:
if interval == 2:
b += 1
else:
if interval == 3:
c += 1
else:
if interval == 4:
d += 1
else:
if interval == 5:
e += 1
else:
if interval == 6:
f += 1
if interval == 1:
a += 1
elif interval == 2:
b += 1
elif interval == 3:
c += 1
elif interval == 4:
d += 1
elif interval == 5:
e += 1
elif interval == 6:
f += 1
当然,如果你可以提取a
.. f
到字典中,如:
state = {"a": 0, "b": 0, "c": 0, "d": 0, "e": 0, "f": 0}
你可以做
interval_to_state = {1: "a", 2: "b", 3: "c", 4: "d", 5: "e", 6: "f"}
state[interval_to_state[interval]] += 1
使用list
,而不是多个变量:
# a b c d e f # Index 0 are unused.
acc = [0, 0, 0, 0, 0, 0, 0] # OR [0] * 7
if 1 <= interval <= 7:
acc[interval] += 1
# OR acc[interval - 1] += 1
# If you don't want to waste a slot in the list.
或者'ACC [间隔 - 1] + = 1' ? – thefourtheye 2014-09-30 14:42:31
@thefourtheye,我在代码中添加了一条评论来提及它。谢谢。 – falsetru 2014-09-30 14:49:54
我会建议使用一本字典,与反向查找,这样
values = {name: 0 for name in "abcdef"}
indexes = {idx: name for idx, name in enumerate("abcdef", 1)}
values[indexes[interval]] += 1
注意'dict.fromkeys(“abcdef”,0)' – Veedrac 2014-09-30 14:42:45
@Veedrac是,但我觉得理解比'fromkeys'更可读 – thefourtheye 2014-09-30 14:43:33
使用'elif',不'else' ... – 2014-09-30 14:39:12