使用列表解析中的列表展开将嵌套列表压平

3

我看到了这个合并列表的解决方案,例如a = [1,2,3],b = [4,5,6],可以使用res = [*a, *b]

假设我有一个包含子列表的列表,例如ls = [a,b],是否可以像这样做:res = [*i for i in ls]

那个具体的行是无效的,因为SyntaxError: iterable unpacking cannot be used in comprehension。是否可以做类似的事情?

如果不行,如何轻松创建一个包含所有子列表元素的列表?

使用Python 3.5.3


2
那个语法适用于Python3.6。 - cs95
2
@cᴏʟᴅsᴘᴇᴇᴅ 在使用Python3.6.1时遇到了相同的错误。 - araknoid
1
@araknoid 我正在谈论 [*a, *b] - cs95
@MSeifert 我认为这不是重复的问题,因为我特别询问了 [*i for i in ls],而 Making... 是在询问 reduce,尽管我们都在寻求解决同一个问题的方法。 - CIsForCookies
1
在这种情况下,我认为标题需要更多的澄清。我已经自作主张进行了编辑。 - cs95
显示剩余2条评论
1个回答

6
不,我不认为他们已经在推导式中添加了列表解包的支持。
作为替代方案,您可以使用 itertools.chain:
>>> from itertools import chain
>>> list(chain.from_iterable([a, b]))
[1, 2, 3, 4, 5, 6]

或者,一个嵌套循环的列表推导式:
>>> [y for x in [a, b] for y in x]
[1, 2, 3, 4, 5, 6]

不仅在3.6中可以执行[*a, *b],在3.5中也是可以的(参见PEP 448)。 - MSeifert
@MSeifert 感谢确认! - cs95
或者是 sum(ls, [])。我的意思是,他们只是要求“容易”。 - Stefan Pochmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接