[英]Python Extend List Comprehension
我正在嘗試在解析多個參數時使列表理解,這些參數可以是單個,逗號分隔或空值。
以下是一段簡短的代碼:
csv_ip = '192.168.1.1,192.168.1.20'
single_ip = '33.44.33.22'
empty_ip = None
ip_list = [ip for ip in [csv_ip.split(','), single_ip, empty_ip] if ip]
print ip_list
>> [['192.168.1.1', '192.168.1.20'], '33.44.33.22']
我想知道在拆分CSV值時是否可以擴展列表,因此列表如下:
['192.168.1.1', '192.168.1.20', '33.44.33.22']
是否可以擴展列表理解與另一個列表?
您可以在通過“添加”子列表進行過濾之前只創建一個平面列表:
csv_ip = '192.168.1.1,192.168.1.20'
single_ip = '33.44.33.22'
empty_ip = None
ip_list = [ip for ip in csv_ip.split(',') + [single_ip] + [empty_ip] if ip]
print ip_list
>>> ['192.168.1.1', '192.168.1.20', '33.44.33.22']
如果要使用一個版本來平等對待所有參數情況,則可以使用:
ip_list = [ip for s in [csv_ip, single_ip, empty_ip] for ip in (s.split(",") if s else [])]
沒有辦法進行實際的extend
,但是您可以通過使用itertools.chain
獲得相同的結果。
from itertools import chain
ip_list = [ip for ip in chain(csv_ip.split(','), [single_ip, empty_ip]) if ip]
itertools.chain
吸收了一堆可迭代對象,然后迭代第一個元素,然后第二個元素的所有元素,依此類推,因此您還需要在列表中發送single_ip
和empty_ip
。
既然要說的是,您不知道哪些參數將包含逗號分隔的IP,哪些將包含單個IP,哪些將包含None
,那么如果您嘗試對它們的行為進行硬編碼,您將不會走得很遠。 相反,請檢查每個參數並進行適當處理:
csv_ip = '192.168.1.1,192.168.1.20'
single_ip = '33.44.33.22'
empty_ip = None
args = csv_ip, single_ip, empty_ip
result = [item for arg in args for item in (arg.split(',') if arg else '')]
結果:
>>> for item in result:
... print(item)
...
192.168.1.1
192.168.1.20
33.44.33.22
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.