用python反转字符串

reverse a string in Python

我在寻找一种向后打印字符串的方法,在Google上快速搜索之后,我发现了以下方法:

假设"a"是字符串变量。这将使"a"字符串向后返回:

1
a[::-1]

有人能解释一下这是怎么回事吗?


当然,[::]是扩展切片操作符。它允许您获取子字符串。基本上,它的工作方式是指定您想要的元素为[开始:结束:步骤],并且它适用于所有序列。它有两个好处:

  • 您可以省略一个或多个元素,它执行"正确的操作"
  • 开始、结束和步骤的负数有意义

对于开始和结束,如果给出一个负数,则意味着从序列的末尾开始计数。例如,如果我有一个列表:

1
l = [1,2,3]

l[-1]为3,l[-2]为2,l[-3]为1。

对于step参数,负数意味着反向遍历序列。所以对于一个列表:

1
l = [1,2,3,4,5,6,7,8,9,10]

您可以编写l[::-1],这基本上意味着在阅读列表时使用-1的步长。python在填充start和stop时将"做正确的事情",因此它向后遍历列表,并向您提供[10,9,8,7,6,5,4,3,2,1]

我已经给出了带有列表的示例,但是字符串只是另一个序列,工作方式相同。因此,a[::-1]意味着通过连接向后遍历字符串得到的字符来构建字符串。


"-1"部分表示切片的"步骤"部分,在本例中,它一次通过字符串1字符,但向后(负步骤表示从字符串末尾开始)。例如,如果将步骤指定为2,则将从第一个字符开始获取字符串的其他所有字符。如果指定步骤为-2,则会得到字符串的所有其他字符,从最后一个字符开始,然后向后工作。

因此,简而言之,如果a = '12345'

  • a[::2]变为135
  • a[::-1]变为54321
  • a[::-2]变为531


我认为下面的内容对反向打印字符串更有意义,但也许只有我自己:

1
2
for char in reversed( myString ):  
  print( char, end ="" )


它是扩展切片符号:

1
sequence[start:end:step]

在这种情况下,步骤-1意味着向后,省略开始和结束意味着需要整个字符串。


我会这样做:

1
2
3
4
5
variable ="string"
message =""
for b in variable:
    message = b+message
print (message)

它打印:gnirts


[::-1]给出了字符串a的一部分。完整语法是a[begin:end:step]。它给出一个[开始],一个[开始+步骤],…[1-1 ]。当步骤为负时,从结束处开始,移动到开始处。

最后,begin默认为序列的开始、结束和步骤-1。


它使用扩展切片——字符串是Python中的序列,与其他序列(即列表和元组)共享一些方法。切片有三个部分-开始、停止和步骤。它们都有默认值——start默认为0,stop默认为len(sequence),step默认为1。通过指定[::-1]您将说"序列A中的所有元素,从开始到结束,一次向后一个。

这个特性是在python2.3.5中引入的,您可以在什么是新文档中阅读更多内容。


它在Python中被称为切片表示法,您可以在这里了解它的工作原理:

解释python的切片表示法


它是基本的步骤符号,考虑以下功能:

A〔2∶4∶2〕

发生的是索引在位置2和4之间被切片,第三个变量的作用是从第一个值开始设置步长。在这种情况下,它将返回一个[2],因为[4]是一个上界,只返回两个值,不进行第二步。减号运算符只是反转步骤输出。


字符串本质上是一个字符序列,因此切片操作对其有效。事实上,你所做的是:

->从开始到结束,以向后1步的方式获取"a"的切片。


您可以使用reversed()函数。例如

1
2
3
4
5
6
7
8
x ="abcd"
for i in reversed(x):
        print(i, end="")
print("
"
)
L = [1,2,3]
for i in reversed(L):
        print(i, end="")

打印dcba321


使用扩展切片语法

1
2
3
4
5
word = input ("Type a word which you want to reverse:")
def reverse(word):
  word = word[::-1]
  return word
print (reverse(word))

在不使用reversed或[::-1]的情况下,这里是一个基于递归的简单版本,我认为它是最可读的:

1
2
3
4
5
6
7
8
9
def reverse(s):

  if len(s)==2:
    return s[-1] + s[0]

  if len(s)==1:
    return s[0]

  return s[-1] + reverse(s[1:len(s)-1]) + s[0]

我们可以用append和pop来完成

1
2
3
4
5
6
7
def rev(s):
    i = list(s)
    o = list()
    while len(i) > 0:
        o.append(t.pop())

    return ''.join(o)


考虑下面的列表

1
l=[12,23,345,456,67,7,945,467]

颠倒清单的另一个技巧可能是:

1
2
3
4
5
l[len(l):-len(l)-1:-1] [467, 945, 7, 67, 456, 345, 23, 12]

l[:-len(l)-1:-1] [467, 945, 7, 67, 456, 345, 23, 12]

l[len(l)::-1] [467, 945, 7, 67, 456, 345, 23, 12]