我写的Python代码,并得到这样的列表:如何连接列表以获取带有端口的IP地址?
['221.180.147.30', '86', '61.155.169.11', '808']
我怎样才能把它转化为:
['221.180.147.30:86', '61.155.169.11:808']
我写的Python代码,并得到这样的列表:如何连接列表以获取带有端口的IP地址?
['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
recipe - grouper
(此作品为fo [R可迭代的,不仅是对列表):
>>> [':'.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])
从布尔汗哈立德的答案出来。
我希望这不会成为一个“列表中的所有我们可以这样做的方式“种类的帖子:D – 2014-09-21 04:47:44
@BurhanKhalid,我会停止更新答案;) – falsetru 2014-09-21 04:48:36
如果zip(*[iter(lst)]*2)
导致有点过分headscratching,尝试简单的选择,使用切片语法:
>>> ['{}:{}'.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']
我们使用的是列表理解这是计算结果为列表中的表达式两者。
+1,我忘了切片;) – falsetru 2014-09-21 04:47:49
可能更简洁...
>>> 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']
请不要发布重复的答案。 – 2014-09-21 04:32:22
发布时不重复 – dawg 2014-09-21 04:34:03
'[ ':' 加入(F [0:2]), ':'。加入(F [2:4])]' – 2014-09-21 04:15:29