Python列表理解if else statemets

run*_*man 6 python

如何通过列表理解来表达?新手需要帮助。非常感谢。下面的代码:

lst = ['chen3gdu',2,['chengdu','suzhou']]
result = []
for elem in lst:
    if type(elem) == list:
        for num in elem:
            result.append(num)
    else:
        result.append(elem)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

这不适用于列表理解,但是您可以在没有列表时通过特殊包装将此类元素包装在列表中以进行迭代来实现:

result = [num for elem in lst for num in ([elem] if not isinstance(elem, list) else elem)]
Run Code Online (Sandbox Code Playgroud)

与您所使用的相同,并加上一个额外的变量来调用我使用的条件表达式,它等效于:

result = []
for elem in lst:
    _nested = [elem] if not isinstance(elem, list) else elem
    for num in _nested:
        result.append(num)
Run Code Online (Sandbox Code Playgroud)

您可能希望在生成器函数中封装平整不规则结构:

def flatten(irregular_list):
    for elem in irregular_list:
        if isinstance(elem, list):
            yield from elem
        else:
            yield elem
Run Code Online (Sandbox Code Playgroud)

然后将其用于列表推导等操作中,并进行其他操作。对于仅展平,将生成器函数传递给list()会更整洁,例如result = list(flatten(lst))