编写列表解析以展平嵌套列表

Fuj*_*lan 1 python list-comprehension list python-3.x

我有一个嵌套列表与列表和数字混合.

nested = [[1, 2, 3], [4, 5, 6], [7, 8], [9], 10, 11]
Run Code Online (Sandbox Code Playgroud)

嵌套列表只包含数字,它们永远不会包含更多列表.

是否可以编写列表推导来从'嵌套'列表中创建新列表,产生以下输出?

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Run Code Online (Sandbox Code Playgroud)

这是我的尝试(代码不起作用)

[num if isinstance(item, list) for num in item else item for item in nested]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

您需要将实例测试放在循环中,以便从嵌套列表中提取元素:

[num for item in nested for num in (item if isinstance(item, list) else (item,))]
Run Code Online (Sandbox Code Playgroud)

演示:

>>> nested = nested = [[1, 2, 3], [4, 5, 6], [7, 8], [9], 10, 11]
>>> [num for item in nested for num in (item if isinstance(item, list) else (item,))]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Run Code Online (Sandbox Code Playgroud)

如果你首先将它表达为一组for循环,它会有所帮助; 你的尝试基本上是这样的:

for item in nested:
    _element = num if isinstance(item, list) for num in item else item
    result.append(_element)
Run Code Online (Sandbox Code Playgroud)

这不是真正有效的Python.

我上面的列表理解是这样做的:

for item in nested:
    _iterable = item if isinstance(item, list) else (item,)
    for num in _iterable:
        _element = num
        result.append(_element)
Run Code Online (Sandbox Code Playgroud)