50

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

编码:

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

它返回TypeError. 为什么?

4

8 回答 8

122

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

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"

:)

于 2012-09-09T02:52:53.170 回答
52

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

改用这个:

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

我已经为您在 IDEOne 上运行了代码,以便您查看输出。(另请注意,输出为stringaisThis;您可能希望使用' '.join(revword), 和空格来代替。)

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

于 2012-09-09T02:43:42.440 回答
7

字符串上的各种反转:

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
于 2012-09-09T05:10:08.273 回答
6

供将来参考,当对象具有类似[].reverse()它的方法时,通常对对象执行该操作(即,列表已排序并且不返回任何内容,无)与内置函数(例如sorted对对象执行操作并返回值)形成对比(即排序列表)

于 2012-09-09T05:20:36.840 回答
4
>>> s = 'this is a string'
>>> s[::-1]
'gnirts a si siht'
>>> ''.join(reversed(s))
'gnirts a si siht'
于 2012-09-09T05:01:58.387 回答
0

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'
于 2014-05-08T07:38:25.637 回答
0

根据评论和其他答案:

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

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

于 2014-08-01T15:42:20.340 回答
0

列表反转可以使用不止一种方式完成。
正如前面的答案中提到的,两个非常突出,一个具有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()与切片相比,函数执行得更好。

于 2015-12-29T09:44:31.627 回答