【问题标题】:(In Python) What's the difference between list(string).reverse() and list(string)[::-1]?(在 Python 中)list(string).reverse() 和 list(string)[::-1] 有什么区别?
【发布时间】:2019-01-08 13:53:15
【问题描述】:

我可以在 Python shell 中执行这两个表达式而不会出错:

string = '这是一个字符串'
列表(字符串)[::-1]

(输出) ['g', 'n', 'i', 'r', 't', 's', '', 'a', '', 's', 'i', ' ', 's', 'i', 'h', 't']

list(string).reverse()

我能做到:

string = ''.join(list(string)[::-1])

有效地将字符串反转到位。但是,当我这样做时:

string = ''.join(list(string).reverse()

我遇到了一个错误:

TypeError: 只能加入一个可迭代对象

所以 list(string).reverse() 不会返回一个可迭代的但 list(string)[::-1] 会。有人可以帮我理解潜在的差异吗?

【问题讨论】:

  • 值得注意的是,字符串是可以直接切片的,不需要先创建一个列表再把join的字母组合在一起。只需使用string[::-1]

标签: python list iterable


【解决方案1】:

list.reverse() 改变了调用它的列表,因此该列表在调用后被更改,而sequence[::-1] 创建一个新列表并返回它,因此原始列表不受影响。

【讨论】:

    【解决方案2】:

    list(string).reverse()就地修改列表并返回None

    所以你正在做:

    "".join(None)
    

    因此错误。

    【讨论】:

      【解决方案3】:

      list.reverse 正在返回 None,因此您无需将其重新分配,但是,seq[::-1] 需要重新分配,例如:

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

      输出:

      None
      [3,2,1]
      

      示例 2:

      l=['a','b','c']
      print(l[::-1])
      print(l)
      

      输出:

      ['c','b','a']
      ['a','b','c']
      

      示例 2 需要重新分配

      【讨论】:

        猜你喜欢
        • 2014-07-22
        • 2017-05-08
        • 2022-06-13
        • 1970-01-01
        • 1970-01-01
        • 2016-08-12
        • 2011-04-07
        • 2012-09-26
        • 2010-10-15
        相关资源
        最近更新 更多