我有一个脚本可以为一些校园无线移动交换机生成配置。用户需要为配置提供一组IP地址。
在其他限制条件中,这些IP必须全部位于同一/ 24子网中(始终为/ 24)。为了避免IP位于不同子网中的错别字(这会混淆配置并且已经发生),我想告诉用户哪个IP有问题。我写了以下内容,但我觉得有更好的方法可以做到。
假设列表是这样的,其中第三个IP错误:
ips = ['10.0.0.1', '10.0.0.2', '10.0.10.3', '10.0.0.4', '10.0.0.5']
以下内容完成了工作:
subnets = set()
for ip in ips:
subnets.add('.'.join(ip.split('.')[0:3]))
# This would result in subnet being set(['10.0.10', '10.0.0'])
if len(subnets) > 1:
seen_subnets = defaultdict(list)
for sn in subnets:
for ip in ips:
if sn in ip:
seen_subnets[sn].append(ip)
suspect = ''
for sn in seen_subnets.keys():
if len(seen_subnets[sn]) == 1:
suspect = seen_subnets[sn][0]
if not suspect:
# Do something to tell the user one or more IP's are incorrect
# but I couldn't tell which ones
注意:我可以拥有的最小列表有3个项目,我假设可能大多数(如果不是全部)错误只有1个IP。
是否有更简单的方法可以做到这一点?我认为解决方案必须基于使用set
的方式,但在我看来,它的任何方法都不会比这更有用。
答案 0 :(得分:1)
这样的事情会起作用:
this.state