IPython 笔记本中的列表理解返回 [None、None、None...]

List comprehension in IPython Notebook returning [None, None, None...]

我希望在 IPython Notebook 中使用列表理解生成枚举字符串列表。它有效,但给了我一个我不明白的奇怪输出。

cols = []
[cols.append('Value'+str(hour)) for hour in xrange(1,25)]

在 运行 单元格之后,cols returns 正确的列表 [Value1,Value2...Value24],但在我的笔记本中,我收到了 24 None 的输出列表. Example photo

代码有效,但是奇怪的输出让我觉得我做错了什么,而且看起来很草率。为什么我会得到这个输出,有没有办法摆脱它?

您在列表中看到的 None 是计算函数调用 cols.append('Value'+str(hour)) 的结果。您会看到带有正确条目的结果 cols,因为它们被追加,但在此列表理解方法中生成的列表实际上仅包含多次评估 append() 的结果。

尝试 cols = ['Value'+str(hour) for hour in xrange(1,25)]

cols.append(value) 将值附加到 cols 但 returns None,它不会 return cols 附加值,所以在你的代码之后,cols 有你想要的内容,但你可以这样做更好:

cols = ['Value'+str(hour) for hour in xrange(1,25)]

这是因为您对列表的理解会 return 一个 None 的列表。相反,您需要在附加完成后实际的列表列。为此,您所要做的就是用您的列表理解替换虚拟列表的第一个元素,如下所示:

[[cols.append('Value'+str(hour)) for hour in xrange(1,25)], cols][1]

或者简单地说:

[('value'+str(x)) for x in xrange(1,25)]