我希望在IPython Notebook中使用列表推导生成枚举字符串列表。它有效,但给了我一个奇怪的输出,我不明白。
cols = []
[cols.append('Value'+str(hour)) for hour in xrange(1,25)]
运行单元格后,cols
会返回正确的列表[Value1,Value2...Value24]
,但在我的笔记本中,我会收到24 None
的输出列表。 Example photo
代码有效,但奇怪的输出让我觉得我做错了什么,看起来很草率。为什么我得到这个输出,有没有办法摆脱它?
答案 0 :(得分:3)
您在列表中看到的None
是评估函数调用cols.append('Value'+str(hour))
的结果。您会看到生成的cols
具有正确的条目,因为它们会被追加,但是在此列表推导方法中生成的列表实际上只包含多次评估append()
的结果。
而是尝试cols = ['Value'+str(hour) for hour in xrange(1,25)]
答案 1 :(得分:2)
cols.append(value)
将值附加到cols
但返回None
,它不会返回带有附加值的cols
,因此在您的代码之后,cols的内容为你想要,但你可以用这个做得更好:
cols = ['Value'+str(hour) for hour in xrange(1,25)]
答案 2 :(得分:0)
这是因为您具有列表理解功能,因此将返回“无”列表。相反,您需要添加完成后的实际列表列。为此,您要做的就是用列表理解方式替换虚拟列表的第一个元素,如下所示:
[[cols.append('Value'+str(hour)) for hour in xrange(1,25)], cols][1]
或简单地:
[('value'+str(x)) for x in xrange(1,25)]