【问题标题】:List comprehension in IPython Notebook returning [None, None, None...]IPython Notebook 中的列表理解返回 [None, None, None...]
【发布时间】:2017-09-09 01:12:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 好吧,cols.append 返回什么? None,对吧?这就是你的Nones 的来源:你告诉Python 将cols.append() 的结果放入一个列表中,24 次。
  • 因为列表理解创建了一个新列表。在您的情况下,append 的返回值列表,恰好是 None

标签: python python-2.7 list-comprehension jupyter-notebook ipython-notebook


【解决方案1】:

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

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

【讨论】:

  • 好吧,做到了。可能应该很明显,谢谢!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    这是因为您拥有的列表理解将返回一个无列表。相反,您希望在附加完成后获得实际的列表 cols。为此,您所要做的就是用您的列表理解替换虚拟列表的第一个元素,如下所示:

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

    或者简单地说:

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

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 2021-06-04
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多