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']

请注意,我们需要在没有 / 的字符串周围添加 [],因为字符串也是可迭代的。