从嵌套列表中过滤/删除/排除私有IP及其端口
什么是这个问题:
这里使用的是Python 2.7。
我正在使用virustotal的API来生成一个IP地址的列表,格式是列表。当我对这个对象使用type()时,它返回的是列表。在下面有一个数据的例子。有没有办法通过过滤器、正则表达式的列表推导,或者一些通配符系统,来去掉所有以10、172.16到172.31和192.168开头的IP地址呢?
为什么要这样做:
从报告中生成了一些常见的IP地址,但对我来说这些是没用的。我已经做了一个列表推导来过滤掉特定的地址,但这个列表在不断增长,很明显,排除的列表会让主列表变得更慢。我想去掉所有不重要的IP地址,这样就不会因为无用的记录而拖慢我的脚本。
怎么做:
unique = [xte for xte in unique if xte not in fil2]
fil2 = [['255.255.255.255',67],['137.170.185.211',123],['213.186.33.99',53],['10.0.2.15',68]]
数据的例子:
>>> fil2 = [['255.255.255.255',67],['137.170.185.211',123],['213.186.33.99',53],['10.0.2.15',68]]
>>> type(fil2)
<type 'list'>
2 个回答
0
你可以试着用列表推导式来做一个类似于 startswith
的功能,像这样:
ips = [ip for ip in file2[0] if not str(ip[0]).startswith(('192.168.','10.','172.16.','172.31.')) ]
0
你可以这样做:
dont_start_with_these = ('10.', '172.16.', '172.31.', '192.168')
filtered_ip = [ip for ip in fil2 if not ip[0].startswith(dont_start_with_these)]
补充:这是一个更简洁的解决方案,感谢Vizjerei的建议。