我编写了一个脚本来下拉aws标记的列表,然后阅读最后一个octect并告诉我哪个是最高的IP。例如。以下是返回的标记列表:
['vlslabmc, 172.16.0.13/24', 'vlslabmc,172.16.0.5/24', 'vlslabmc,172.16.0.3/24', 'vlslabmc,172.16.0.12/24', 'vlslabmc,172.16.0.16/24', 'vlslabmc,172.16.0.6/24', 'vlslabmc,172.16.0.1/24', 'vlslabmc,172.16.0.11/24', 'vlslabmc,172.16.0.15/24', 'vlslabmc,172.16.0.17/24', 'vlslabmc,172.16.0.4/24', 'vlslabmc,172.16.0.7/24', 'vlslabmc,172.16.0.10/24', 'vlslabmc,172.16.0.9/24', 'vlslabmc,172.16.0.8/24', 'vlslabmc,172.16.0.2/24', 'vlslabmc,172.16.0.14/24']
下面是我的代码,用来计算tagLis中最大的IP(注意,最大的是17172.16.0.17)
^{pr2}$我不知道为什么。。但当我打印largestIP的值时,它总是打印出16。我已经看过了应该有效的代码(我避免使用max函数,因为我只是在学习编码)
如有任何帮助,我们将不胜感激。在
谢谢
好吧,多亏了cmarie的线索,我找到了它,问题主要是
33 largestIP = int(ipList[0])
下面是前面运行的代码,在list append中添加了print语句:
'13']
['13', '5']
['13', '5', '3']
['13', '5', '3', '12']
['13', '5', '3', '12', '16']
16
['13', '5', '3', '12', '16', '6']
16
['13', '5', '3', '12', '16', '6', '1']
16
['13', '5', '3', '12', '16', '6', '1', '11']
16
... ...
['13', '5', '3', '12', '16', '6', '1', '11', '15', '17', '4', '7', '10', '9', '8', '2']
16
['13', '5', '3', '12', '16', '6', '1', '11', '15', '17', '4', '7', '10', '9', '8', '2', '14']
16
基本上,在这个循环过程中:
33 largestIP = int(ipList[0])
34 for latestIP in ipList:
35 if int(latestIP) > largestIP:
36 largestIP = latestIP
循环在第一个最大整数处停止。在这个例子中是16。*我不知道为什么会这样,但确实如此
工作代码如下:
19 def findLargestIP():
20 ipList =[]
21 for i in tagList:
22 #remove all the spacing in the tags
23 ec2Tags = i.strip()
24 #seperate any multiple tags
25 ec2SingleTag = ec2Tags.split(',')
26 #find the last octect of the ip address
27 fullIPTag = ec2SingleTag[1].split('.')
28 #remove the CIDR from ip to get the last octect
29 lastIPsTag = fullIPTag[3].split('/')
30 lastOctect = lastIPsTag[0]
31 ipList.append(int(lastOctect))
32 print ipList
33 largestIP = 0
34 for latestIP in ipList:
35 if latestIP > largestIP:
36 largestIP = latestIP
37 print latestIP
38 print largestIP
39 return largestIP
结果是:
[13, 5, 3, 12, 16]
13
16
[13, 5, 3, 12, 16, 6]
13
16
[13, 5, 3, 12, 16, 6, 1]
13
16
[13, 5, 3, 12, 16, 6, 1, 11]
13
16
[13, 5, 3, 12, 16, 6, 1, 11, 15]
13
16
[13, 5, 3, 12, 16, 6, 1, 11, 15, 17]
13
16
17
注意找到了17个。在
代码相当复杂(远远超出需要),但错误是
ipList
被字符串填充,然后将其元素与整数进行比较。在这在Python2中是一个无声的问题源(在比较不同类型时,您得到了一个无意义但稳定的
True
/False
的结果),而在python3中,它变成了一个错误。在在我看来,更简单的实现方式是:
意思是:
split(",")[1]
接受逗号后的部分split("/")[0]
接受斜杠前的部分split(".")[-1]
获取IP地址的最后一部分int(...)
转换为整数max(... for x in taglist
对所有元素执行此操作并保持最大或者使用regexp
^{pr2}$虽然其他人已经为您提供了一些其他方法来找到答案,但如果您想继续使用您的程序,以下是一些解决方法:
与你的计划不同的是我:
ipList = []
largestIP = 0
,而不是取ipList的第一个数字(因为您不应该假定列表是排序的)tagList
上]——只是为了消除不必要的迭代但是,如果我要做这个任务,我会尝试使用正则表达式。以下是一种方法:
^{pr2}$为什么这么复杂。这是一条线
相关问题 更多 >
编程相关推荐