如何打印第一个和最后一个值?

时间:2017-04-07 06:50:55

标签: python python-3.x

以下部分代码打印出子网中的所有主机IP地址,我想修改代码,使其只打印此列表的起始地址和最后一个地址

如何在此处使用数组来打印第一个和最后一个值?

import ipaddress
print('enter subnet')  # in CIDR Format
x = input()
IP= ipaddress.ip_network(x, strict = False)
for y in IP.hosts():
 print(y)

当前输出

enter subnet
192.0.0.0/29
192.0.0.1
192.0.0.2
192.0.0.3
192.0.0.4
192.0.0.5
192.0.0.6

期望的输出

HostMin:   192.0.0.1  
HostMax:   192.0.0.6

=========================================

更新:

使用列表后,我可以打印第一个和最后一个值

however this takes quite longer to compute whenever i give a large
subnet

like 192.0.0.0/8 takes longer to print the first and last value, 

for: IPV6 address calculations it hangs forever, 
for: example: the  IPV6 address is 2001:db8::1/96 

this list will have 4294967294 elements since this IPV6 subnet has
these many IP address and it hangs forever to print the first and
last element of the list

3 个答案:

答案 0 :(得分:1)

list[0]list[-1]分别为您提供第一个和最后一个元素

import ipaddress
print('enter subnet')  # in CIDR Format
x = input()
IP= ipaddress.ip_network(x, strict = False)
k = list(IP.hosts())
print("HostMin: ",k[0])
print("HostMax: ",k[-1])

更新了第一个和最后一个IP而不生成整个IP范围的答案

import ipaddress
def hosts(IPTYPE):
    """Custom function derived from IPv6Network/IPv4Network.hosts to get only first and last host

    """
    network = int(IPTYPE.network_address)
    broadcast = int(IPTYPE.broadcast_address)
    return IPTYPE._address_class(network+1),IPTYPE._address_class(broadcast)

print('enter subnet')  # in CIDR Format
x = input()
IP= ipaddress.ip_network(x, strict = False)
m = hosts(IP)
print("HostMin: ",m[0])
print("HostMax: ",m[1])

答案 1 :(得分:0)

for y in IP.hosts():替换为y = list(IP.hosts())然后您可以

print y[0]
print y[-1]

您应该阅读hosts()函数的文档“返回网络中可用主机的迭代器”

答案 2 :(得分:0)

你不在这里使用数组。使用清单!

first_item = list[0]
last_item = list[-1]