Python 一次添加更多元素的列表理解
Python list comprehension with adding more elements in one go
我想弄清楚如果您在一个步骤中创建目标列表的多个元素,是否可以理解列表。
让我们有一个这样的列表:input_list=['A','B','C/D','E']
最后我想要得到的是 output_list=['A','B','C','D','E']
.
这是我现在的代码片段:
output=[]
for x in input:
if '/' in x:
output+=x.split('/')
else:
output.append(x)
我想出的唯一列表理解是:[x.split('/') if '/' in x else x for x in input]
但显然,这不是我需要的,因为它输出了这个嵌套列表:['A','B',['C','D'],'E']
这可能吗,或者我只是想从简单的列表理解中得到太多?
您可以编写包含两个 for
部分的列表理解。这是否"simple"见仁见智。
input_list=['A','B','C/D','E']
print [y for x in input_list for y in (x.split('/') if '/' in x else [x])]
这实际上等同于:
input_list=['A','B','C/D','E']
output = []
for x in input_list:
if '/' in x:
sub_list = x.split('/')
else:
sub_list = [x]
for y in sub_list:
output.append(y)
print output
使用嵌套列表理解:
>>> input_list = ['A','B','C/D','E']
>>> [y for x in input_list for y in (x.split('/') if '/' in x else [x])]
['A', 'B', 'C', 'D', 'E']
或使用itertools.chain.from_iterable
:
>>> from itertools import chain
>>> list(chain.from_iterable(x.split('/') if '/' in x else [x] for x in input_list))
['A', 'B', 'C', 'D', 'E']
请注意,我们需要在没有 /
的字符串周围添加 []
,因为字符串也是可迭代的。
我想弄清楚如果您在一个步骤中创建目标列表的多个元素,是否可以理解列表。
让我们有一个这样的列表:input_list=['A','B','C/D','E']
最后我想要得到的是 output_list=['A','B','C','D','E']
.
这是我现在的代码片段:
output=[]
for x in input:
if '/' in x:
output+=x.split('/')
else:
output.append(x)
我想出的唯一列表理解是:[x.split('/') if '/' in x else x for x in input]
但显然,这不是我需要的,因为它输出了这个嵌套列表:['A','B',['C','D'],'E']
这可能吗,或者我只是想从简单的列表理解中得到太多?
您可以编写包含两个 for
部分的列表理解。这是否"simple"见仁见智。
input_list=['A','B','C/D','E']
print [y for x in input_list for y in (x.split('/') if '/' in x else [x])]
这实际上等同于:
input_list=['A','B','C/D','E']
output = []
for x in input_list:
if '/' in x:
sub_list = x.split('/')
else:
sub_list = [x]
for y in sub_list:
output.append(y)
print output
使用嵌套列表理解:
>>> input_list = ['A','B','C/D','E']
>>> [y for x in input_list for y in (x.split('/') if '/' in x else [x])]
['A', 'B', 'C', 'D', 'E']
或使用itertools.chain.from_iterable
:
>>> from itertools import chain
>>> list(chain.from_iterable(x.split('/') if '/' in x else [x] for x in input_list))
['A', 'B', 'C', 'D', 'E']
请注意,我们需要在没有 /
的字符串周围添加 []
,因为字符串也是可迭代的。