我正在尝试优化代码。
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', ...]
如果节点以02
或05
或06
或09
结尾,我会继续替换这些特定节点名称的字典值。
是否可能有类似的内容:
如果节点名称以02
或05
或06
或09
结尾,则一次性替换字典中的所有值,而不是在每行中进行比较,然后替换
答案 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