在不使用reversed()或[::-1]的情况下反转字符串?

2024-05-17 00:45:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个奇怪的Codecademy练习,它需要一个函数,该函数将字符串作为输入并以相反的顺序返回它。唯一的问题是不能在stackoverflow上使用反向方法或公共答案,[::-1]

显然,在编程的现实世界中,人们很可能使用extended slice方法,甚至使用reversed函数,但也许在某些情况下这不起作用?

我在下面以问答的方式提出一个解决方案,以防将来对人们有所帮助。


Tags: 方法函数字符串答案extended顺序编程方式
3条回答

使用反向range

def reverse(strs):
    for i in xrange(len(strs)-1, -1, -1):
        yield strs[i]
...         
>>> ''.join(reverse('hello'))
'olleh'

使用-1步骤的xrangerange将按相反的顺序返回项,因此我们需要从len(string)-1-1(独占)进行迭代,并逐个从字符串中获取项。

>>> list(xrange(len(strs) -1, -1 , -1))
[4, 3, 2, 1, 0]  #iterate over these indexes and fetch the items from the string

一行:

def reverse(strs):
    return ''.join([strs[i] for i in xrange(len(strs)-1, -1, -1)])
... 
>>> reverse('hello')
'olleh'

只是另一种选择:

from collections import deque
def reverse(iterable):
    d = deque()
    d.extendleft(iterable)
    return ''.join(d)

您还可以使用递归来执行此操作:

def reverse(text):
    if len(text) <= 1:
        return text

    return reverse(text[1:]) + text[0]

还有一个简单的字符串示例hello

   reverse(hello)
 = reverse(ello) + h           # The recursive step
 = reverse(llo) + e + h
 = reverse(lo) + l + e + h
 = reverse(o) + l + l + e + h  # Base case
 = o + l + l + e + h
 = olleh

相关问题 更多 >