解析2个维度列表并返回列表的值

时间:2019-02-14 13:16:04

标签: python-3.x

如何解析4x4矩阵列表并返回值?假设我有一个这样的列表:

output = [[1,aaa,bbb,ccc],
         [2,bbb,ccc,ddd],
         [3,ccc,ddd,ccc],
         [4,ddd,eee,ddd]]

如果最后一列的值为ddd,它将返回我的第一列。有什么更好的方法?如果要解析的输入是字符串,那么从该字符串创建2D列表还是解析字符串本身更好?请花几分钟来解释解决方案。无需使用任何模块用法或复杂的正则表达式就能做到吗?

1 个答案:

答案 0 :(得分:0)

这是对部分暴露的问题的部分响应。

假设给定的输入(我使用变量名输入,而不是输出),并且想要的输出为[2,4],则可以使用以下命令:

input = [
    [1,"aaa","bbb","ccc"],
    [2,"bbb","ccc","ddd"],
    [3,"ccc","ddd","ccc"],
    [4,"ddd","eee","ddd"]
]


output = [line[0] for line in input if line[3] == "ddd"]

>>> [2, 4]

这是一个易于理解的列表理解。 对于4x4矩阵,我认为您甚至不应该考虑寻找其他东西,或者不使用python。

在路由器上输出命令“ show ip interface brief”,并使用如下格式的字符串,使用制表符(\ t)进行分隔:

  

以太网0 10.108.00.5是NVRAM up
  未分配Ethernet1是是在管理上未设置停机   Loopback0 10.108.200.5是NVRAM up
  Serial0 10.108.100.5是NVRAM up up
  Serial1 10.108.40.5是NVRAM up
  Serial2 10.108.100.5是手动上调
  未分配Serial3是是在管理上未设置

首先将列分开,然后在行中搜索。

input_from_command_on_router = \
"""Ethernet0\t10.108.00.5\tYES\tNVRAM\tup\tup
Ethernet1\tunassigned\tYES\tunset\tadministratively down\tdown
Loopback0\t10.108.200.5\tYES\tNVRAM\tup\tup
Serial0\t10.108.100.5\tYES\tNVRAM\tup\tup
Serial1\t10.108.40.5\tYES\tNVRAM\tup\tup
Serial2\t10.108.100.5\tYES\tmanual\tup\tup
Serial3\tunassigned\tYES\tunset\tadministratively down\tdown"""

interfaces_down = []
for line in input_from_command_on_router.split("\n"):
    fields = line.split("\t")
    if fields[4] == "administratively down":
        interfaces_down.append(fields[0])

请注意,如果只需要显示接口名称,使用awk / sed / cut(选择您偏爱的工具)的简单shell脚本就足够安静了。