【问题标题】:Python reverse listPython反向列表
【发布时间】:2012-09-09 02:40:57
【问题描述】:

我正在尝试反转字符串并使用以下代码,但结果反转列表值为无。

代码:

str_a = 'This is stirng'
rev_word = str_a.split()
rev_word = rev_word.reverse()
rev_word = ''.join(rev_word)

它返回TypeError。为什么?

【问题讨论】:

  • 已经在这里answered? (就我个人而言,我喜欢那里的 ''.join(reversed(s)) 解决方案。)
  • 我希望 #reverse 返回对 self 的引用。我猜 Guido van Rossum 不像 Yukihiro Matsumoto 那样喜欢方法链。

标签: python


【解决方案1】:

这是我个人最喜欢的反转字符串的方法:

stra="This is a string"
revword = stra[::-1]

print(revword) #"gnirts a si sihT

或者,如果你想颠倒词序:

revword = " ".join(stra.split()[::-1])

print(revword) #"string a is This"

:)

【讨论】:

  • 我知道它有效。但我期待“T”,因为我们没有提到任何开始和结束的内容,我希望 Python 从 0 开始并向后移动。请告诉我它是如何工作的。
  • @thefourtheye 看到这个堆栈溢出:stackoverflow.com/questions/509211/the-python-slice-notation
  • @SeanJohnson 因此,如果我们将 -1 作为步长值,默认情况下它将向后遍历。对吗?
【解决方案2】:

.reverse() 返回None。因此,您不应该将其分配给变量。

改用这个:

stra = 'This is a string'
revword = stra.split()
revword.reverse()
revword=''.join(revword)

我已为您运行代码on IDEOne,以便您查看输出。 (另请注意,输出为 stringaisThis;您可能希望使用带有空格的 ' '.join(revword)。)

另请注意,您提供的方法仅反转单词,而不是反转文本。 @ron.rothman 提供了一个链接,详细说明了如何完全反转字符串。

【讨论】:

    【解决方案3】:

    字符串上的各种反转:

    instring = 'This is a string'
    reversedstring = instring[::-1]
    print reversedstring        # gnirts a si sihT
    wordsreversed = ' '.join(word[::-1] for word in instring.split())
    print wordsreversed         # sihT si a gnirts
    revwordorder = ' '.join(word for word in instring.split()[::-1])
    print revwordorder          # string a is This
    revwordandorder = ' '.join(word[::-1] for word in instring.split()[::-1])
    print revwordandorder       # gnirts a si sihT
    

    【讨论】:

      【解决方案4】:

      当一个对象有一个像[].reverse()这样的方法时,为了将来参考,它通常在对象上执行那个动作(即,列表被排序并且什么都不返回,无)与像sorted这样的内置函数执行一个对对象进行操作并返回一个值(即排序列表)

      【讨论】:

        【解决方案5】:
        >>> s = 'this is a string'
        >>> s[::-1]
        'gnirts a si siht'
        >>> ''.join(reversed(s))
        'gnirts a si siht'
        

        【讨论】:

          【解决方案6】:

          for循环将字符串从end(最后一个字母)迭代到start(第一个字母)

          >>> s = 'You can try this too :]'
          >>> rev = ''
          >>> for i in range(len(s) - 1, -1, -1):
          ...     rev += s[i]
          >>> rev
          ']: oot siht yrt nac uoY'
          

          【讨论】:

          • 考虑提供一些解释!
          • rev 是一个空字符串 var。 for 循环向后迭代原始字符串(从结尾的“最后一个字母”到开头的“第一个字母”)。在每次迭代中,相应的字母都会附加到 rev。让我知道这是否有帮助:]
          【解决方案7】:

          基于 cmets 和其他答案:

          str_a = 'this is a string'
          rev_word = ' '.join(reversed(str_a.split()))
          

          毕竟方法链在 Python 中确实有效...

          【讨论】:

            【解决方案8】:

            列表反向可以使用不止一种方法来完成。
            正如前面的答案中提到的,两个非常突出,一个具有reverse() 功能,两个具有切片功能。我正在就我们应该更喜欢哪一个提供一些见解。 我们应该始终使用reverse() 函数来反转 Python 列表。两个原因,一个就地反转,两个比其他更快。 我有一些数据可以支持我的回答,

            In [15]: len(l)
            Out[15]: 1000
            
            In [16]: %timeit -n1 l.reverse()
            1 loops, best of 3: 7.87 µs per loop
            
            In [17]: %timeit -n1 l[::-1]
            1 loops, best of 3: 10 µs per loop
            

            对于 1000 个整数列表,reverse() 函数的性能优于切片。

            【讨论】:

              猜你喜欢
              • 2011-12-08
              • 1970-01-01
              • 2012-11-11
              • 2020-07-29
              • 2022-09-25
              • 2022-07-06
              • 1970-01-01
              • 1970-01-01
              • 2014-11-27
              相关资源
              最近更新 更多