Python扩展列表理解

Python扩展列表理解,python,python-2.6,python-2.x,Python,Python 2.6,Python 2.x,我试图在解析多个参数时进行列表理解,这些参数可以是单个、逗号分隔或空值 下面是一段简短的代码: 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.

我试图在解析多个参数时进行列表理解,这些参数可以是单个、逗号分隔或空值

下面是一段简短的代码:

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 [])]

没有办法进行实际的
扩展
,但使用
itertools.chain

from itertools import chain

ip_list = [ip for ip in chain(csv_ip.split(','), [single_ip, empty_ip]) if ip]

itertools.chain
接收一组iterable,然后迭代第一个、第二个的所有元素,依此类推,因此您需要在列表中发送
single\u ip
empty\u 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

如果您使用的是Python3:
[ip for ip in[*csv_-ip.split(',')、single_-ip、empty_-ip]If-ip]
。我使用的是Python2.6-我想在以后的文章中提到这一点很重要。。干杯是的,但请记住,如果您的问题是关于python的,请始终使用
python
标记。查看标记信息的详细信息。如果您想问一个新问题,并且代码示例实际应用于您的程序(例如,an),请随意提问,我会将此问题的答案转移到它。好的,
[ip for ip in csv_ip.split(',')+[single_ip,empty_ip]If ip]
也很好。这对我来说很好-如果你能编辑你的答案,包括Kevins的评论,那就太好了(因为我已经将此标记为答案),我将使用此解决方案。干杯这不要求您知道哪些参数是单个IP或
None
?@TigerhawkT3是,就像原始示例一样。我不知道这个问题的实际背景是什么。当然,它可以将它们都视为逗号分隔的IP列表,但是如果字符串可以是
None
,那么仍然需要一些东西。这个解决方案的目的是说明一种可以使用的机制。OP应该能够根据需要进行调整。OP是“解析多个参数,可以是单个、逗号分隔或空值”。此解决方案依赖于了解每个参数的类别,然后对值进行硬编码。