优化比较的数量

2024-04-27 09:24:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试优化这里的代码。你知道吗

if ns=='8':
    for i in nodes:
        if '02' == i[-2:]:
            d[i]='quorum-manager'
        if '05' == i[-2:]:
            d[i]='quorum-manager'
        if '06' == i[-2:]:
            d[i]='quorum-manager'
        if '09' == i[-2:]:
            d[i]='quorum-manager'

上面,i是一个节点名列表,例如:

i = ['xyz01', 'xyz02', 'xyz03', ...]

如果节点以02050609结尾,我继续替换这些特定节点名称的字典值。你知道吗

有没有可能有这样的东西:

如果节点名以02050609结尾,则一次替换字典中的重复值,而不是在每行中比较然后替换


Tags: 代码in列表forif字典节点结尾
2条回答

如果有i[-2:]可能是的字符串列表,只需使用in运算符:

if ns=='8':
    for i in nodes:
        if i[-2:] in ('02', '05', '06', '09'):
            d[i]='quorum-manager'

您应该在集合中查找i的最后一部分:

for i in nodes:
    if i[-2:] in {"02","05","06","09"}:
        d[i] = 'quorum-manager'

在一个列表中反复搜索(就像在其他答案中一样)是很慢的,而且通常是不好的实践。python2.7及更高版本支持大括号表示法{...};您还可以定义这样的集合:set(["02","05","06","09"])。如果你经常这样做,你可以事先做一组等价的选项,然后重复使用它们。你知道吗

更一般的建议:如果您有许多导致相同操作的不相关的测试,您应该编写一个if,其中有几个与or相关的测试。你知道吗

# Imaginary example
if i.endswith("02") or i.endswith("z03") or i[:2] == "xy":
    d[i]='quorum-manager'

相关问题 更多 >