仅使用列表理解来展平2级嵌套列表

时间:2019-09-05 15:30:08

标签: python python-3.x

我有以下列表

In [13]:  nested_list=[0,25,[0,2,3,4],[1,1,-1,-1]]

我想按如下所述将其展平:

[0,25,0,2,3,4,1,1,-1,-1]

使用以下列表理解

[y for y in x if isinstance(x,list) else x for x in nested_list]

但是我遇到了这个错误

 In [16]: [y for y in x if isinstance(x,list) else x for x in nested_list]
 File "<ipython-input-16-e49b6b9924a1>", line 1
[y for y in x if isinstance(x,list) else x for x in nested_list]
                                       ^
 SyntaxError: invalid syntax

我知道有多个解决方案不使用列表推导,而是使用递归。 但是,我想使用列表理解。 有人可以建议正确的语法吗?

3 个答案:

答案 0 :(得分:3)

使用列表理解的一种方法:

break

更新

更简单:

[y for z in [x if isinstance(x, list) else [x] for x in nested_list] for y in z]
#[0, 25, 0, 2, 3, 4, 1, 1, -1, -1]

答案 1 :(得分:2)

仅限于由xlist组成的列表int,可以通过以下方式完成

x = [0,25,[0,2,3,4],[1,1,-1,-1]]
res = []
for i in x:
    if type(i) == int:
        res.append(i)
    else:
        res += i 
print(res) 

输出

[0, 25, 0, 2, 3, 4, 1, 1, -1, -1]

在一行代码中写上面。

x = [0,25,[0,2,3,4],[1,1,-1,-1]]
sum([[i] if type(i) == int else i for i in x],[])

答案 2 :(得分:0)

仅使用列表理解,使用type()而不是isinstance的变体:

nested_list=[0,25,[0,2,3,4],[1,1,-1,-1]]

[i for sublist in [[x] if type(x) == int else x for x in nested_list] for i in sublist]