5种逆转Python字符串的方法

395 阅读5分钟

在Python中,一连串的字符构成了一个字符串。然而,在Python中,字符串是不可改变的--改变字符串不会改变字符串,但会创建一个新的字符串。因此,在Python中没有内置的方法来逆转字符串。

好吧,不用担心;我们有一些变通的方法来实现反转字符串的任务。让我们逐一来看看这些方法。

切片

这是逆转字符串的最简单和最短的方法之一。Python中的分片法接受三个参数,如下所述。

  1. 起始索引
  2. 结束索引
  3. 步骤 (可选,但在我们的例子中需要它)

有两种方法可以使用这个操作符,使用扩展的切片语法或 [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 ,并在以后与字符串一起使用。

reversedjoin

在这个方法中,我们使用两个内置的函数:reversedjoin

reversed

>>> for letter in reversed('abc'):
...     print(letter)
...
c
b
a

reversed 方法返回迭代器(它允许我们一个一个地访问元素),我们可以按相反的顺序访问。

join

>>> ''.join(['a','b','c'])
'abc'

join 方法从迭代器中获取数值并将其缝合成一个字符串。开头的引号用于指定一个字符或一个模式来连接字符串。我们不想要任何模式;因此我们把它留空。

同时使用reversedjoin

通过同时使用这两个函数,我们可以实现以下结果。

>>> 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'
  1. 在这里,我们正在创建一个函数reverse ,它接受一个字符串作为输入。
  2. 然后我们初始化一个空字符串,它将被用来存储输出。
  3. 遍历input_string 中的每个字符,我们将new_string 添加到该字符。
  4. 循环完成后,我们得到所需的结果,并将其返回。

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. 在这里,我们要创建一个函数,并初始化一个新的变量,与前面的例子相同
  2. 现在我们取输入字符串的长度并减去1 ,因为Python中的索引是从 0 开始的。减法的动作也可以用另一种方式完成,即。new_string = new_string + input_string[count - 1]
  3. while 循环中,我们检查计算出的长度是否大于或等于零。这一部分应该仔细完成,因为任何错误都会导致程序进入无限循环
  4. 接下来,我们将新的字符串添加到迭代的字符中,并通过1 减少计数。我们减少计数是因为我们需要在迭代结束后停止,否则,会导致无限循环
  5. 一旦计数小于零,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.'

递归是一个概念,在这个概念中,函数调用自己。在我们的例子中,我们定义了一个接受字符串输入的函数。首先,我们检查收到的字符串的长度是否等于零;如果是,我们返回字符串。然后,我们调用同一个函数,如果这个条件不成立,我们就传递除第一个字符以外的输入。结果将与第一个被省略的字符连在一起。

这个函数只有在输入字符串的长度为零时才会结束。

列表reversejoin

这是我们今天要看的最后一个方法。在这里,我们将输入的字符串转换为字符列表。然后我们在它上面使用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 方法一起使用,该方法返回一个可迭代的数据
  • 使用循环forwhile是逆转字符串的最直接的方法
  • 使用自调用函数--递归来逆转一个字符串
  • 利用Python中内置的reverse 方法来反转一个列表并连接它

在计算机科学中,有多种方法来解决一个问题,但不是每一种解决方案都是有效的。所以现在我们已经看到了逆转 Python 字符串的不同方法,我鼓励你计算你在上面学到的各种方法的运行时间。通过这种方式,你可以自己尝试这些方法中的每一种,这样你就能很好地掌握它,并在最后拥有最快的策略。

请在评论中告诉我哪一个是最快的。

The post5 methods to reverse a Python stringappeared first onLogRocket Blog.