我在使用ipaddress.collapse_addresses()方法时遇到困难。
# n is a list of 192.168.0.0/24 networks (1,2,3,4....etc)
def sumnet():
n = nlist()
for net in n:
snet = ipaddress.collapse_addresses(net)
return snet我只想要回原来的名单:
Collapsed Networks
[IPv4Network('192.168.0.0/24'), IPv4Network('192.168.1.0/24'),
IPv4Network('192.168.2.0/24'), IPv4Network('192.168.3.0/24'),
IPv4Network('192.168.4.0/24'), IPv4Network('192.168.5.0/24'),
IPv4Network('192.168.6.0/24'), IPv4Network('192.168.7.0/24'),
IPv4Network('192.168.8.0/24')]发布于 2019-08-06 20:32:44
假设您的输入是来自is地址的IPv4Networks列表,如下..。
netlist = [ipaddress.IPv4Network('192.168.0.0/24'),
ipaddress.IPv4Network('192.168.1.0/24'),
ipaddress.IPv4Network('192.168.2.0/24'),
ipaddress.IPv4Network('192.168.3.0/24'),
ipaddress.IPv4Network('192.168.4.0/24'),
ipaddress.IPv4Network('192.168.5.0/24'),
ipaddress.IPv4Network('192.168.6.0/24'),
ipaddress.IPv4Network('192.168.7.0/24'),
ipaddress.IPv4Network('192.168.8.0/24')]您想要的输出是
[IPv4Network('192.168.0.0/21'), IPv4Network('192.168.8.0/24')]这一切都可以用.
import ipaddress
def sumnet(netlist):
return list(ipaddress.collapse_addresses(netlist))
netlist = [ipaddress.IPv4Network('192.168.0.0/24'),
ipaddress.IPv4Network('192.168.1.0/24'),
ipaddress.IPv4Network('192.168.2.0/24'),
ipaddress.IPv4Network('192.168.3.0/24'),
ipaddress.IPv4Network('192.168.4.0/24'),
ipaddress.IPv4Network('192.168.5.0/24'),
ipaddress.IPv4Network('192.168.6.0/24'),
ipaddress.IPv4Network('192.168.7.0/24'),
ipaddress.IPv4Network('192.168.8.0/24')]
print(sumnet(netlist))collapse_addresses方法实际上接受了一个完整的地址列表,您不必一个一个地给它喂食ip_addresses。它将为崩溃的网络返回一个生成器,但您可以将其转换为一个列表,以便更容易地处理它。
如果这不是你想要达到的目标,请告诉我。
很难准确理解您的代码应该做什么,因为下面的代码段启动了一个for循环,在这个循环中,它捕获第一个ip地址,将其折叠到一个生成器中,然后使用该单个ip地址返回生成器,而无需查看任何其他ip地址。然而,这似乎与您的问题所声称的输出不一致。
for net in n:
snet = ipaddress.collapse_addresses(net)
return snethttps://stackoverflow.com/questions/57382997
复制相似问题