Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用for循环编辑内部列表时在嵌套列表中迭代时遇到问题_Python_Loops_Nested Lists - Fatal编程技术网

Python 使用for循环编辑内部列表时在嵌套列表中迭代时遇到问题

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:

我就是不知道如何管理一些arp表。唯一与我相关的数据是列出的ip地址和mac地址。我不知道我是否应该

  • 遍历
    嵌套列表
    ,删除
    [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,因为它不会更改我要查找的输出。真的这么简单吗?我知道我想得太多了。我很快就会试试这个,听起来这就是我想要的。非常感谢。很好,它帮了我的忙。顺便说一句,如果它解决了你的问题,你可以给出一个答案。只需点击复选标记(✓) 在答案旁边。这将使其从灰色变为填充。刚刚试用并获得了我期望的准确输出。非常感谢。答案已被接受!这也非常有用。另一个解决方案现在解决了我的问题,但这将有助于使数据更有用,以后更易于访问。谢谢!当然,没问题,我很高兴一切顺利!