【问题标题】:Why list reverse returns Null? [duplicate]为什么列表反向返回Null? [复制]
【发布时间】:2014-07-22 04:52:48
【问题描述】:

我有这样的示例列表:

l = [1,2,3]

print(l.reverse())
#give None instead [3, 2, 1]

怎么样?如何反转列表?

【问题讨论】:

  • 在 IDLE、Python 3.3 中尝试过。效果很好!
  • list.reverse() 反转列表中的元素,就地。
  • 尝试l[::-1] 制作列表的反向副本。

标签: python


【解决方案1】:

如何反转列表?

列表正在被颠倒。但是list.reverse 原地反转,并且不向调用者返回任何内容。您可以通过打印列表上调用reverse 来验证这一点:

>>> l = [1,2,3]
>>> l.reverse()
>>> print(l)
>>> [3, 2, 1]

如有疑问,请使用帮助:

>>> help(list.reverse)

Help on method_descriptor:
reverse(...)
    L.reverse() -- reverse *IN PLACE*

(Python 2.7 文档)

【讨论】:

    【解决方案2】:

    来自文档:

    list.reverse()

    反转列表中的元素,到位。

    您可能已经注意到像insertremovesort 这样只修改列表的方法没有打印返回值——它们返回默认的None。这是 Python 中所有可变数据结构的设计原则。

    【讨论】:

      【解决方案3】:

      Python 不是函数式编程语言——它是命令式的。当您调用 list.reverse() 方法时,您改变了原始列表

      l = [1,2,3]
      l.reverse()
      print l
      # prints [3, 2, 1]
      

      返回None 的方法类似于C/C++/Java 世界中的void 函数/方法。由于list.reverse()对原始列表进行了变异,所以返回没有任何意义,所以返回值为None

      正如@YS-L 在他的评论中指出的,you can use Python's list slicing notation to create a reversed copy of the list

      l = [1,2,3]
      print l[::-1]
      # prints [3, 2, 1]
      

      【讨论】:

        猜你喜欢
        • 2019-11-17
        • 2017-09-27
        • 2012-06-25
        • 1970-01-01
        • 2012-04-14
        • 2017-01-25
        • 2017-06-29
        • 2017-04-03
        • 2011-05-14
        相关资源
        最近更新 更多