在Python中,一连串的字符构成了一个字符串。然而,在Python中,字符串是不可改变的--改变字符串不会改变字符串,但会创建一个新的字符串。因此,在Python中没有内置的方法来逆转字符串。
好吧,不用担心;我们有一些变通的方法来实现反转字符串的任务。让我们逐一来看看这些方法。
切片
这是逆转字符串的最简单和最短的方法之一。Python中的分片法接受三个参数,如下所述。
- 起始索引
- 结束索引
- 步骤 (可选,但在我们的例子中需要它)
有两种方法可以使用这个操作符,使用扩展的切片语法或 [slice](https://docs.python.org/3/library/functions.html#slice)函数。
扩展分片
>>> 'raed ,tsop eht ot emocleW'[::-1]
'Welcome to the post, dear.'
>>> x = '.gnidaer rof sknahT'
>>> x[::-1]
'Thanks for reading.'
在上面的例子中,我们没有提供任何开始和结束索引。默认情况下,开始索引被认为是0 ,结束索引是 n-1 。我们提到的步骤是:-1 ,这意味着字符串从末端继续遍历,并进入到提供所需结果的开头。如上所示,我们也可以将字符串赋值给一个变量并执行这一操作。
slice 方法
>>> step = -1
>>> stop = None
>>> start = None
>>> slicing=slice(start, stop, step)
>>> '.siht gniyojne era uoy epoh I'[slicing]
'I hope you are enjoying this.'
在这里,我们为步骤分配数值-1 ,为开始和停止索引分配数值None 。然后,我们使用slice() 函数,将对象存储到变量slicing ,并在以后与字符串一起使用。
reversed 和join
在这个方法中,我们使用两个内置的函数:reversed 和join 。
reversed
>>> for letter in reversed('abc'):
... print(letter)
...
c
b
a
reversed 方法返回迭代器(它允许我们一个一个地访问元素),我们可以按相反的顺序访问。
join
>>> ''.join(['a','b','c'])
'abc'
join 方法从迭代器中获取数值并将其缝合成一个字符串。开头的引号用于指定一个字符或一个模式来连接字符串。我们不想要任何模式;因此我们把它留空。
同时使用reversed 和join
通过同时使用这两个函数,我们可以实现以下结果。
>>> custom_string = '.flesym ecudortni em teL'
>>> ''.join(reversed(custom_string))
'Let me introduce myself.'
在这里,我们将字符串传递给reversed 函数,并将其反馈给join 函数,后者提供了所需的结果。
循环
for 循环
>>> def reverse(input_string):
... new_string = ''
... for character in input_string:
... new_string = character + new_string
... return new_string
...
>>> reverse('radeK si eman yM')
'My name is Kedar'
- 在这里,我们正在创建一个函数
reverse,它接受一个字符串作为输入。 - 然后我们初始化一个空字符串,它将被用来存储输出。
- 遍历
input_string中的每个字符,我们将new_string添加到该字符。 - 循环完成后,我们得到所需的结果,并将其返回。
while 循环
使用while 循环也可以进行类似的操作。但是,首先,让我们看一下这个例子。
>>> def w_reverse(input_string):
... new_string = ''
... count = len(input_string) - 1
... while count >= 0:
... new_string = new_string + input_string[count]
... count = count - 1
... return new_string
>>> w_reverse('?uoy era woH')
'How are you?'
- 在这里,我们要创建一个函数,并初始化一个新的变量,与前面的例子相同
- 现在我们取输入字符串的长度并减去
1,因为Python中的索引是从0开始的。减法的动作也可以用另一种方式完成,即。new_string = new_string + input_string[count - 1] - 在
while循环中,我们检查计算出的长度是否大于或等于零。这一部分应该仔细完成,因为任何错误都会导致程序进入无限循环 - 接下来,我们将新的字符串添加到迭代的字符中,并通过
1减少计数。我们减少计数是因为我们需要在迭代结束后停止,否则,会导致无限循环 - 一旦计数小于零,
while循环就会完成,我们就会得到结果。
递归
>>> def reverse(str):
... if len(str) == 0: # Checking the length of string
... return str
... else:
... return reverse(str[1:]) + str[0]
...
>>> reverse('.syaw tnereffid ni gnirts nohtyP a esrever ot elba eb dluohs uoy ,won yB')
'By now, you should be able to reverse a Python string in different ways.'
递归是一个概念,在这个概念中,函数调用自己。在我们的例子中,我们定义了一个接受字符串输入的函数。首先,我们检查收到的字符串的长度是否等于零;如果是,我们返回字符串。然后,我们调用同一个函数,如果这个条件不成立,我们就传递除第一个字符以外的输入。结果将与第一个被省略的字符连在一起。
这个函数只有在输入字符串的长度为零时才会结束。
列表reverse 和join
这是我们今天要看的最后一个方法。在这里,我们将输入的字符串转换为字符列表。然后我们在它上面使用reverse 方法。最后,我们使用join 方法来连接反转的列表中的字符。
>>> def list_reverse(input_string):
... input_list = list(input_string)
... input_list.reverse()
... return ''.join(input_list)
...
>>>
>>> list_reverse('dohtem tsal ehT')
'The last method'
结论
在任何编程语言中,处理字符串和反转字符串都是一项常见的任务。尽管这个话题可能没有令人信服的用例,但这些知识对你的编码面试是有帮助的。
以下是本篇文章中使用的策略的总结。
- 扩展切片(
[::-1])是逆转字符串的最短和最简单的方法。然而,我们也可以使用slice()方法来使其可读化 - 将
Join与内置的reversed方法一起使用,该方法返回一个可迭代的数据 - 使用循环
for和while是逆转字符串的最直接的方法 - 使用自调用函数--递归来逆转一个字符串
- 利用Python中内置的
reverse方法来反转一个列表并连接它
在计算机科学中,有多种方法来解决一个问题,但不是每一种解决方案都是有效的。所以现在我们已经看到了逆转 Python 字符串的不同方法,我鼓励你计算你在上面学到的各种方法的运行时间。通过这种方式,你可以自己尝试这些方法中的每一种,这样你就能很好地掌握它,并在最后拥有最快的策略。
请在评论中告诉我哪一个是最快的。
The post5 methods to reverse a Python stringappeared first onLogRocket Blog.