我有以下列表
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
我知道有多个解决方案不使用列表推导,而是使用递归。 但是,我想使用列表理解。 有人可以建议正确的语法吗?
答案 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)
仅限于由x
和list
组成的列表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]