如何解析4x4矩阵列表并返回值?假设我有一个这样的列表:
output = [[1,aaa,bbb,ccc],
[2,bbb,ccc,ddd],
[3,ccc,ddd,ccc],
[4,ddd,eee,ddd]]
如果最后一列的值为ddd
,它将返回我的第一列。有什么更好的方法?如果要解析的输入是字符串,那么从该字符串创建2D列表还是解析字符串本身更好?请花几分钟来解释解决方案。无需使用任何模块用法或复杂的正则表达式就能做到吗?
答案 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脚本就足够安静了。