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)]
我希望在 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)]