我希望使用ipython笔记本中的列表理解来生成枚举字符串列表。它有效,但给了我一个奇怪的输出,我不明白。
cols = []
[cols.append('Value'+str(hour)) for hour in xrange(1,25)]
运行单元格后,cols
返回正确的列表[Value1,Value2...Value24]
,但是在我的笔记本中,我收到了24 None
的输出列表。示例照片
代码有效,但是奇怪的输出使我觉得自己做错了,看起来很草率。为什么我要获得此输出,有什么方法可以摆脱它?
您在列表中看到的None
S是评估函数调用cols.append('Value'+str(hour))
的结果。您会看到带有正确条目的结果cols
,因为它们会附加,但是在此列表中生成的列表理解方法实际上仅由评估append()
的结果多次组成。
尝试cols = ['Value'+str(hour) for hour in xrange(1,25)]
cols.append(value)
将值附加到 cols
,但返回 None
,它不会带有附加值返回 cols
,因此,在代码后,COLS具有您想要的内容,但是您可以做到这一点这样做更好:
cols = ['Value'+str(hour) for hour in xrange(1,25)]
这是因为您拥有的列表理解将返回无列表。取而代之的是,您希望在添加后完成实际列表COLS。为此,您所要做的就是用您的列表理解替换虚拟列表的第一个元素:
[[cols.append('Value'+str(hour)) for hour in xrange(1,25)], cols][1]
或简单:
[('value'+str(x)) for x in xrange(1,25)]