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

时间:2017-03-14 17:36:49

标签: python

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

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 
        }

每当我尝试某些内容时,我最终都会列出两个端口,或者迭代跳过“端口”列表的索引范围。此外,如果有更好的方法来捕获输入或生成输出我都是耳朵!

1 个答案:

答案 0 :(得分:0)

删除嵌套的for - 循环,只在外部for - 循环中包含两个print语句,并在索引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 : 在嵌套的i循环中使用不同的增量名称(jfor)来区分这两个列表可能会获得所需的输出:

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 
        }

至于捕获输入或生成输出的更好方法,请考虑为输入使用不同的数据结构,例如keys nameport,{ {1}}和values作为各自的values

相关问题