Python列表理解if else statemets

时间:2019-03-16 12:44:18

标签: python

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

OnPost()

2 个答案:

答案 0 :(得分:9)

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

result = [num for elem in lst for num in ([elem] if not isinstance(elem, list) else elem)]

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

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

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

def flatten(irregular_list):
    for elem in irregular_list:
        if isinstance(elem, list):
            yield from elem
        else:
            yield elem

,然后将其用于列表推导及其他操作。对于扁平化而言,将生成器函数传递给list()会更干净,例如result = list(flatten(lst))

答案 1 :(得分:2)

Martin Pieters (here)的答案很棒,但是我想在答案的最终代码示例中建议

def flatten(irregular_list):
    for elem in irregular_list:
        if isinstance(elem, list):
            yield from elem
        else:
            yield elem

如果我们将其调整为

def flatten(irregular_list):
    for elem in irregular_list:
        if isinstance(elem, list):
            yield from flatten(elem)
        else:
            yield elem

然后,即使问题列表包含多个列表或“列表中的列表”元素,它也可以展平以给出仅包含非列表元素的列表结果。

PS:我本来只是要评论这个东西,但是我发现我没有足够的声誉。