繁体   English   中英

嵌套循环+格式化多个列表

[英]Nested for loop + formatting multiple lists

这是到目前为止的代码
有关变量的注意事项:
'ports' -'端口'列表中可以有任意数量的端口
'nodes_u'它将包含任意数量的服务器名称和IP地址对
'serv_name_u'可以是任何东西,但一旦定义即为静态
'port_qty'等于“端口”中列出的端口数

ports = ['443', '80']
nodes_u = ['SERVER1', '10.0.0.1', 'SERVER2', '10.0.0.2']
serv_name_u = "TESTING"
port_qty = 2

for i in range(0, len(ports)):
    print("ltm pool "+serv_name_u+"_{0}_pool {{ \n    members {{"
          .format(ports[i]))
    for i in range(0, len(nodes_u), 2):
        print("        {0} {{ \n            address {1} \n        }}"
              .format(nodes_u[i], nodes_u[i+1]))

这是输出示例

ltm pool TESTING_443_pool { 
    members {
        SERVER1 { 
            address 10.0.0.1 
        }
        SERVER2 { 
            address 10.0.0.2 
        }
ltm pool TESTING_80_pool { 
    members {
        SERVER1 { 
            address 10.0.0.1 
        }
        SERVER2 { 
            address 10.0.0.2 
        }

我的问题或试图解决的是如何仅在池部分中获得服务器名称之后显示的端口号! 所以输出像这样

ltm pool TESTING_443_pool { 
    members {
        SERVER1:443 { <<<Port Number Here!
            address 10.0.0.1 
        }
        SERVER2:443 { <<<Port Number Here!
            address 10.0.0.2 
        }
ltm pool TESTING_80_pool { 
    members {
        SERVER1:80 { <<<Port Number Here!
            address 10.0.0.1 
        }
        SERVER2:80 { <<<Port Number Here!
            address 10.0.0.2 
        }

每次尝试执行某项操作时,我都会最终列出两个端口,否则迭代会超出“端口”列表的索引范围。 同样,如果有更好的方法来捕获输入或生成输出,我也很高兴!

删除嵌套的for循环,只将两个print语句都包含在for循环的外部, port号插入到索引:{1}

for i in range(0, len(ports)):
    print("ltm pool "+serv_name_u+"_{0}_pool {{ \n    members {{"
          .format(ports[i]))
    # for i in range(0, len(nodes_u), 2):
    print("        {0}:{1} {{ \n            address {2} \n        }}"
          .format(nodes_u[i], ports[i], nodes_u[i+1]))

输出:

List of nodes:
ltm node SERVER1 { 
    address 10.0.0.1 
    }
ltm node SERVER2 { 
    address 10.0.0.2 
    }
ltm pool TESTING_443_pool { 
    members {
        SERVER1:443 { 
            address 10.0.0.1 
        }
ltm pool TESTING_80_pool { 
    members {
        10.0.0.1:80 { 
            address SERVER2 
        }

尝试#2 :在嵌套的for循环中使用不同的增量器名称( ij )来区分两个列表可能会获得所需的输出:

for i in range(0, len(ports)):
    print("ltm pool "+serv_name_u+"_{0}_pool {{ \n    members {{"
          .format(ports[i]))
    for j in range(0, len(nodes_u), 2):
        print("        {0}:{1} {{ \n            address {2} \n        }}"
              .format(nodes_u[j], ports[i], nodes_u[j+1]))

输出:

ltm pool TESTING_443_pool { 
    members {
        SERVER1:443 { 
            address 10.0.0.1 
        }
        SERVER2:443 { 
            address 10.0.0.2 
        }
ltm pool TESTING_80_pool { 
    members {
        SERVER1:80 { 
            address 10.0.0.1 
        }
        SERVER2:80 { 
            address 10.0.0.2 
        }

为了更好地捕获输入或生成输出,请考虑对输入使用不同的数据结构,例如以keysnameport以及values分别为values字典

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM