簡體   English   中英

如何連接列表以獲取帶有端口的IP地址?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM