优化比较次数

时间:2016-03-21 12:06:17

标签: python dictionary

我正在尝试优化代码。

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结尾,则一次性替换字典中的所有值,而不是在每行中进行比较,然后替换

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

在列表中反复搜索(如在其他答案中一样)很慢,而且一般情况下做的很差。 python 2.7及更高版本支持括号符号{...};你也可以定义一个这样的集合:set(["02","05","06","09"])。如果您经常这样做,您可以提前制作等效选项集并重复使用它们。

更一般的建议:如果您有许多无关的测试导致相同的操作,那么您可以编写一个if,其中有几个测试与{{1}相关联}}

or