【问题标题】:Flatten a nested list using list unpacking in a list comprehension [duplicate]在列表理解中使用列表解包来展平嵌套列表[重复]
【发布时间】:2018-01-30 16:13:28
【问题描述】:

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

假设我有一个子列表列表,例如 ls = [a,b],是否可以执行 res = [*i for i in ls] 之类的操作?

SyntaxError: iterable unpacking cannot be used in comprehension 以来,该特定行无效。可以做类似的事情吗?

如果没有,如何轻松创建包含子列表中所有元素的列表?

使用 python 3.5.3

【问题讨论】:

  • 该语法适用于 python3.6
  • @cᴏʟᴅsᴘᴇᴇᴅ 使用 python3.6.1 遇到同样的错误
  • @araknoid 我正在接受[*a, *b]
  • @cᴏʟᴅsᴘᴇᴇᴅ 哦,我的错。感谢您在答案中指定它。
  • 在这种情况下,我认为标题需要进一步澄清。我冒昧地对其进行了编辑。

标签: python python-3.x list list-comprehension nested-lists


【解决方案1】:

不,我不相信他们已经在推导式中添加了对列表解包的支持。

您也可以使用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,在 3.5 中也可以使用 [*a, *b](参见 PEP 448
  • @MSeifert 感谢您的确认!
  • sum(ls, [])。我的意思是,他们只要求“轻松”。
猜你喜欢
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多