如何从 python 中的列表中 remove/exclude 不需要的对象

How to remove/exclude unwanted objects from a list in python

您好,我正在尝试使用 python 中的 netifaces 获取机器上每个接口的 IP。我对 python 还是个新手,正在研究一些概念,但似乎我可以一次查询每个 NIC,然后将结果放入列表中问题是我的最终目标是询问用户要使用哪个网络继续工作,我想排除所有 returns 'No IP addr'.

我已经尝试了几种不同的方法,包括从列表中删除字符串但没有用,或者只添加 IP 地址对象,但我很确定我没有正确执行它,因为它仍然会出错。感谢任何帮助。

import os
import socket
from netifaces import interfaces, ifaddresses, AF_INET

def get_self_IP():
    for ifaceName in interfaces():
        addresses = []
        possibilities = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}] )]
        print(' '.join(possibilities))
        for i in possibilities:
            if isinstance(i, ifaddress.ipaddress): # if i is an IP address
                addresses.append(i)
        print(addresses)

另外,我现在有两个列表,因为我为了排除故障而更改了几次,但如果我可以将它保留为一个列表,并且在收集 IP 时仅 .append IP,而不是必须做一个带有单独的 for 或 if 循环的整个单独的列表是理想的,但不幸的是我不知道另一种方式。

不确定这是否是您想要的,但是:

我把函数改成了:

def get_self_IP():
  addresses = []
  for ifaceName in interfaces():
      ifaddresses_list = ifaddresses(ifaceName)
      possibilities = [i['addr'] for i in ifaddresses_list.setdefault(AF_INET, [{'addr': 'No IP addr'}])]
      for i in possibilities:
          if ifaddresses_list[2][0]['addr'] != "No IP addr":
              addresses.append(i)
  print(addresses)

ifaddresses(ifaceName) returns 一个字典,显然键 2 包含索引 0 中的 IP 地址和键 'addr',以防万一IP 不存在值为 No IP addr。因为 if 检查是否不是这种情况,然后将 IP 地址添加到地址列表。

如果我没明白你想要什么,请详细回答:)