![](/img/trans.png)
[英]Passing a List of IP address to get port scanned in python (libnmap)
[英]How to connect the list to get ip address with port?
我编写python代码,并得到一个类似的列表:
['221.180.147.30', '86', '61.155.169.11', '808']
我如何将其转换为:
['221.180.147.30:86', '61.155.169.11:808']
使用列表理解:
>>> lst = ['221.180.147.30', '86', '61.155.169.11', '808']
>>> [':'.join(lst[i:i+2]) for i in range(0, len(lst), 2)]
['221.180.147.30:86', '61.155.169.11:808']
使用zip(*[iter(lst)*N]
诱骗其在推出itertools
配方- grouper
(这适用于任何可迭代的,不仅是对列表):
>>> [':'.join(group) for group in zip(*[iter(lst)]*2)]
['221.180.147.30:86', '61.155.169.11:808']
UPDATE
使用map
:
>>> map(':'.join, zip(lst[::2], lst[1::2])) # In Python 2.x
['221.180.147.30:86', '61.155.169.11:808']
>>> list(map(':'.join, zip(lst[::2], lst[1::2]))) # In Python 3.x
['221.180.147.30:86', '61.155.169.11:808']
zip(lst[::2], lst[1::2])
来自Burhan Khalid的回答。
如果zip(*[iter(lst)]*2)
导致过多的抓头操作,请尝试使用更简单的选项,该选项使用切片语法:
>>> ['{}:{}'.format(a,b) for a,b in zip(i[::2], i[1::2])]
['221.180.147.30:86', '61.155.169.11:808']
[::2]
将跳过列表,而[1::2]
会执行相同的操作,但会跳过第一项。 实际上, [::2]
表示“所有条目均位于奇数位置”, [1::2]
表示“所有条目均位于偶数位置”:
>>> i
['221.180.147.30', '86', '61.155.169.11', '808']
>>> i[::2]
['221.180.147.30', '61.155.169.11']
>>> i[1::2]
['86', '808']
zip
只是将两者结合在一起就可以为您提供“成对的”元组:
>>> zip(i[::2], i[1::2])
[('221.180.147.30', '86'), ('61.155.169.11', '808')]
接下来由您决定将这些元组转换为字符串。 @falsetru用':'.join(pair)
做到了,在我的示例中,我使用的是字符串格式。 有几种方法可以做到这一点:
>>> ['{}:{}'.format(*pair) for pair in zip(i[::2], i[1::2])]
['221.180.147.30:86', '61.155.169.11:808']
>>> [':'.join(pair) for pair in zip(i[::2], i[1::2])]
['221.180.147.30:86', '61.155.169.11:808']
>>> ['{}:{}'.format(ip, port) for ip, port in zip(i[::2], i[1::2])]
['221.180.147.30:86', '61.155.169.11:808']
我们都使用列表推导 ,这是一个计算结果为列表的表达式。
可能更简洁...
>>> l = ['221.180.147.30', '86', '61.155.169.11', '808']
>>> [':'.join(s) for s in zip(l[::2], l[1::2])]
['221.180.147.30:86', '61.155.169.11:808']
由于套接字是源ip,源端口,目标ip,目标端口和协议的元组,因此也可以认为它与套接字的理论类型接近。
似乎有人提出了相同的答案。
>>> li=['221.180.147.30', '86', '61.155.169.11', '808']
>>> [':'.join(t) for t in zip(li[0::2], li[1::2])]
['221.180.147.30:86', '61.155.169.11:808']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.