使用单行for循环python追加到一个空列表

Posted

技术标签:

【中文标题】使用单行for循环python追加到一个空列表【英文标题】:Append to an empty list using a single line for-loop python 【发布时间】:2015-03-28 05:35:54 【问题描述】:

我正在尝试使用单行 for 循环将数字从生成器附加到空列表,但它返回 None。我知道可以使用带有 2 行的 for 循环来完成,但我想知道我错过了什么。即,

>>> [].append(i) for i in range(10)

[None, None, None, None, None, None, None, None, None, None]

我希望在一行中创建它:

>>> [].append(i) for i in range(10)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

谢谢。

【问题讨论】:

【参考方案1】:

写一个正确的理解,不附加。

>>> [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(i for i in range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

【讨论】:

哦,太好了!非常感谢!【参考方案2】:

你也可以只转换一个可迭代的范围:

list(range(10))
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

也适用于 numpy 用户:

np.arange(10)
>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

如果你更容易理解,你可以使用 linspace (linspace(from,to,pieces)):

np.linspace(0,9,10)
>>> array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

【讨论】:

【参考方案3】:

添加关于发生了什么的解释, 追加不返回任何东西,

y = []
x = [y.append(i) for i in range(10)]
print(x)
print(y)

生产

[None, None, None, None, None, None, None, None, None, None]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[Program finished]

【讨论】:

【参考方案4】:

y = []

[y.append(i) for i in range(10)]

打印(y)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

【讨论】:

这与this other answer中的解决方案相同。

以上是关于使用单行for循环python追加到一个空列表的主要内容,如果未能解决你的问题,请参考以下文章

Python基础之推导式

在 Python For 循环中追加和弹出项目 [重复]

以追加到列表为结果的多处理 for 循环

20个有用的Python单行代码

20个有用的Python单行代码

为啥我的 for 循环覆盖而不是追加?