这有点令人困惑(至少对我而言)。我正在使用一个简单的Python脚本使用fping返回“启动”主机的列表。我将每个“ up”主机存储在Python列表中,但是list.sort()显然不会基于存储为字符串的IP地址的最后一个八位位组进行排序。我想对降序的.1,.2,.3等进行排序。
这是代码的一部分:
for addr in os.popen("fping -a -q -g " + subnet):
addr = addr.rstrip('\n')
addr_list.append(addr)
addr_list.sort()
for ip in addr_list:
print ip
假设您的addr_list
列表如下所示(您尚未在问题中指定列表):
addr_list = [
'10.11.12.13',
'1.2.3.4',
'127.0.0.1',
'192.168.0.1',
]
在上进行分割,.
并使用最后一项(最后一个八位位组)作为排序的键。当然,对于“ 127.0.0.1”和“ 192.168.0.1”,您可能想对第二倒数第二个字节进行排序,然后对第三倒数第八个字节进行排序,然后对第一个八比特组进行排序。
因此,将此行为用作key
:
>>> list(reversed('10.11.12.13'.split('.')))
['13', '12', '11', '10']
>>> sorted(addr_list, key=lambda ip: list(reversed(ip.split('.'))))
['127.0.0.1', '192.168.0.1', '10.11.12.13', '1.2.3.4']
请注意,13
之前已列出4
。因此,还要确保将每个项目都比较为数字而不是字符串:
>>> sorted(addr_list, key=lambda ip: map(int, reversed(ip.split('.'))))
['127.0.0.1', '192.168.0.1', '1.2.3.4', '10.11.12.13']
将其分配给另一个列表或进行就地排序:
>>> addr_list.sort(key=lambda ip: map(int, reversed(ip.split('.'))))
>>> addr_list
['127.0.0.1', '192.168.0.1', '1.2.3.4', '10.11.12.13']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句