Python 使用for循环编辑内部列表时在嵌套列表中迭代时遇到问题
我就是不知道如何管理一些arp表。唯一与我相关的数据是列出的ip地址和mac地址。我不知道我是否应该Python 使用for循环编辑内部列表时在嵌套列表中迭代时遇到问题,python,loops,nested-lists,Python,Loops,Nested Lists,我就是不知道如何管理一些arp表。唯一与我相关的数据是列出的ip地址和mac地址。我不知道我是否应该 遍历嵌套列表,删除[0,2,4,5] 遍历列表,将[1]和[3]分配给新列表 我两种方法都试过了,只是没能达到目的。我的语法知识明显不足 在您将要看到的任何代码之前,我首先使用with/as访问一个文件,然后使用.readlines()创建一个我调用的字符串列表read\u output 以下是我目前的代码: nested_list = [] for index in read_output:
嵌套列表
,删除[0,2,4,5]
[1]
和[3]
分配给新列表with
/as
访问一个文件,然后使用.readlines()
创建一个我调用的字符串列表read\u output
以下是我目前的代码:
nested_list = []
for index in read_output:
nested_list.append(index.split()) #this creates the nested list.
print(nested_list)
这很好,并为我提供了以下输出示例:
[['Internet', '10.220.88.1', '135', '0062.ec29.70fe', 'ARPA', 'FastEthernet4'],
['Internet', '10.220.88.40', '144', '001c.c4bf.826a', 'ARPA', 'FastEthernet4']]
arp列表可以比这个大很多,但我想我会为我们的示例节省一些空间。我希望能够浏览列表并添加/删除/提取我认为合适的数据,但每次尝试都会遇到不同程度的失败
如果我只是:
print(nested_list[0][3])
我得到了0062.ec29.70fe
的预期结果,但是当我尝试使用第二个for循环来访问每个[n][0]
,[n][2]
等时,事情变得非常糟糕
我从以下几点开始:
for index in read_output:
nested_list.append(index.split())
for indx in nested_list:
# --->insert some horrible excuse for python here
我的预期输出是将上面的嵌套列表裁剪为:
[['10.220.88.1', '0062.ec29.70fe'],
['10.220.88.40', '001c.c4bf.826a']]
不要在第一个位置附加整个子列表,而只附加您想要的两项:
nested_list = []
for index in read_output:
inner = index.split()
nested_list.append([inner[1], inner[3]])
好吧,我希望我理解正确,但根据我的理解,你得到的数据是正确的,这是:
[['Internet', '10.220.88.1', '135', '0062.ec29.70fe', 'ARPA',
'FastEthernet4'],
['Internet', '10.220.88.40', '144', '001c.c4bf.826a', 'ARPA',
'FastEthernet4']]
你看得对,这实际上是一个列表,包含两个子列表。我们可以在下面的代码中利用这一点
list = [['Internet', '10.220.88.1', '135', '0062.ec29.70fe', 'ARPA', 'FastEthernet4'],['Internet', '10.220.88.40', '144', '001c.c4bf.826a', 'ARPA', 'FastEthernet4']]
现在我们已经包含了这个列表,类似于您所做的,我们可以循环浏览这个列表
for item in list:
print ("IP: {0}\nMac Address:{1}\n".format(item[1],item[3]))
这给了我希望您能期待的结果,即:
IP: 10.220.88.1
Mac Address: 0062.ec29.70fe
IP: 10.220.88.40
Mac Address: 001c.c4bf.826a
我们所做的就是在外部列表中运行一个循环,因为我们知道IP地址总是在内部列表的索引1和3处,所以我们只是通过它们的索引访问它们
您不需要在内部列表中运行另一个循环,因为您已经知道它们的位置
要存储这些地址,您可能需要将它们存储在
字典,因为您有一个键、值对类型的设置
address = {}
count += 1
for item in list:
count += 1
address["list: {0}".format(count)] = [item[1], item[3]]
print ("IP: {0}".format(item[1])
print ("Mac Address: {0}".format(item[3]))
print ()
print (address)
通过这个,我们设置了一个计数来增加我们的键名,并且在每个新列表中,我们将需要的两个特定值保存在另一个列表中。
一个很好的挑战是如何将其转换为一种形式,其中您的密钥是ip和mac,而您的值是,嗯,值。
我曾想过要这么做,但这甚至让我有点困惑,我想尽快把我的答案告诉你。希望这有帮助 欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。在这段代码中,我不确定您想要输出什么:一方面,您引用了每行的位置1和3;在另一个例子中,您将讨论迭代其他四个元素。另外,您使用的
pprint
命令是从哪里来的?这不是Python内置的。一旦你澄清了,我希望我们能在几分钟内解决你的问题。抱歉,至于pprint,它基本上可以忽略,它只是“从pprint导入pprint”,有助于设置长内容的格式。我真正需要的是能够循环遍历嵌套列表并删除不需要的数据。每次尝试此操作时,我都会删除所有内容或不删除任何内容,或生成错误。我已按照建议编辑了代码并删除了pprint,因为它不会更改我要查找的输出。真的这么简单吗?我知道我想得太多了。我很快就会试试这个,听起来这就是我想要的。非常感谢。很好,它帮了我的忙。顺便说一句,如果它解决了你的问题,你可以给出一个答案。只需点击复选标记(✓) 在答案旁边。这将使其从灰色变为填充。刚刚试用并获得了我期望的准确输出。非常感谢。答案已被接受!这也非常有用。另一个解决方案现在解决了我的问题,但这将有助于使数据更有用,以后更易于访问。谢谢!当然,没问题,我很高兴一切顺利!