在Python中简化复杂的逻辑条件。

3

我该如何简化这个复杂的逻辑条件?

以更短、更易读的代码为目标。

if i < 13:
    linux0[j] = query_res
elif 13 <= i < 27:
    linux1[j] = query_res
elif 27 <= i < 28:
    linux2[j] = query_res
elif 28 <= i < 33:
    linuxDnsServer1[j] = query_res
elif 33 <= i < 41:
    linuxRadius[j] = query_res
elif 41 <= i < 46:
    gen[j] = query_res
elif 46 <= i < 49:
    cdu[j] = query_res
elif 49 <= i < 55:
    avalanche[j] = query_res
elif 55 <= i < 69:
    defensePro_devices[j] = query_res
1个回答

4

虽然不一定更易懂,但您可以将界限和列表放入另一个列表中,并迭代它。

targets = [(12, linux0), (26, linux1), (27, linux2), (32, linuxDnsServer1),
           (40, linuxRadius), (45, gen), (48, cdu), (54, avalanche), (68, defensePro_devices)]
for limit, target in targets:
    if i <= limit:
        target[j] = query_res
        break

添加:1)如果您需要非连续间隔,可以使用显式的“range”对象交换限制,然后在“if i <= limit”的位置使用“if i in interval”。2)您还可以在“for”结尾处添加一个“else”分支,以处理未找到匹配项的情况(即当“break”语句从未被执行时)。 - Brian61354270
我本来想加上 #2,但由于原始代码没有打印错误,所以我把它留了下来。 - Barmar
处理非连续间隔的另一种方法是使用额外的列表来表示间隙。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接