【发布时间】:2018-04-06 07:22:31
【问题描述】:
假设这样一个包含多个项目的字典:
d = {'foo':['c', 'a', 't'], 'bar':['d', 'o', 'g']}
我想制作
l = ['c', 'a', 't', 'd', 'o', 'g']
In [75]: l = []
...: for i in d.values():
...: l.extend(i)
...: print(l)
['c', 'a', 't', 'd', 'o', 'g']
尝试使用extend方法在一行内实现。
In [76]: [ [].extend(i) for i in d.values() ]
Out[76]: [None, None]
In [79]: [ list().extend(i) for i in d.values()]
Out[79]: [None, None]
列表理解输出[None, None]的原理是什么?
很容易实现
In [78]: [i for j in d.values() for i in j]
Out[78]: ['c', 'a', 't', 'd', 'o', 'g']
是否可以在单行中使用extend 方法?
【问题讨论】:
-
extend方法更新现有列表(调用extend 的列表)并返回None。 -
extend就地修改列表,extend的返回值为None -
TypeError: list() 最多接受 1 个参数(给定 2 个)@Norrius
-
@Tool 如果你想要一个单行,应该这样做:
import itertools; list(itertools.chain(*d.values()))。 Docs. 请注意,.values()中的元素顺序可能没有明确定义。
标签: python