在Python中反转一个字符串

时间:2009-04-19 21:35:55

标签: python string slice

我正在寻找一种向后打印字符串的方法,在google上快速搜索后,我发现了这种方法:

假设'a'是一个字符串变量。这将向后返回'a'字符串:

a[::-1]

任何人都能解释一下这是如何运作的吗?

16 个答案:

答案 0 :(得分:73)

当然,[::]extended slice运营商。它允许你采取子串。基本上,它通过指定哪些元素作为[begin:end:step]来工作,它适用于所有序列。关于它的两个巧妙的事情:

  • 您可以省略一个或多个元素,它可以做“正确的事情”
  • 开始,结束和步骤的负数具有含义

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

l = [1,2,3]

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

对于step参数,负数表示通过序列向后。所以对于列表::

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

您可以编写l[::-1],这基本上意味着在阅读列表时使用步长为-1。填写开始和停止时,Python将“做正确的事”,因此它会向后遍历列表,并为您提供[10,9,8,7,6,5,4,3,2,1]

我已经给出了带有列表的示例,但字符串只是另一个序列,并以相同的方式工作。所以a[::-1]意味着通过在字符串中向后走来加入你得到的字符来构建一个字符串。

答案 1 :(得分:7)

“-1”部分代表切片的“步骤”部分 - 在这种情况下,它一次通过字符串1字符,但是向后(负步骤意味着从字符串的结尾开始)。例如,如果将步骤指定为2,则会从第一个字符开始获取字符串的每个其他字符。如果指定步长为-2,那么你将获得该字符串的所有其他字符,从最后一个字符开始并向后工作。

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

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

答案 2 :(得分:6)

我认为以下内容对于反向打印字符串更有意义,但也许这只是我:

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

答案 3 :(得分:3)

这是extended slice notation

sequence[start:end:step]

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

答案 4 :(得分:2)

它在Python中称为Slice Notation,你可以在这里阅读更多它的工作原理:

Explain Python's slice notation

答案 5 :(得分:2)

它使用扩展切片 - 字符串是Python中的一个序列,并与其他序列(即列表和元组)共享一些方法。切片有三个部分 - 开始,停止和步骤。所有这些都有默认值 - 默认值为0,默认为len(序列),步骤默认为1.通过指定[:: - 1],你说的是“序列a中的所有元素,从头开始,最后向后退一个。

此功能是在Python 2.3.5中引入的,您可以在What's New docs中阅读更多内容。

答案 6 :(得分:2)

[:: - 1]给出了字符串a的切片。完整语法为a[begin:end:step] 给出[开始],[开始+步骤],... [结束-1]。当步骤为负时,您从结束开始并开始移动。

最后,开始默认为序列的开头,结束到结束,步骤为-1。

答案 7 :(得分:2)

我会这样做:

variable = "string"
message = ""
for b in variable:
    message = b+message
print (message)

并打印:gnirts

答案 8 :(得分:1)

字符串本质上是一个字符序列,因此切片操作对它起作用。你在做什么事实上是:

- >从头到尾逐步获得一个'a'片段。

答案 9 :(得分:1)

这是基本步骤表示法,请考虑以下功能:

A [2:4:2]

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

答案 10 :(得分:0)

考虑下面的列表

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

扭转列表的另一个技巧可能是:

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]

答案 11 :(得分:0)

我们可以使用append和pop来做到这一点

def rev(s):
    i = list(s)
    o = list()
    while len(i) > 0:
        o.append(t.pop())

    return ''.join(o)

答案 12 :(得分:0)

不使用reverse或[:: - 1],这是一个基于递归的简单版本,我认为是最易读的:

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]

答案 13 :(得分:0)

使用扩展切片语法

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

答案 14 :(得分:0)

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

onActivityResult

打印NewAddressFragmentonActivityResult

答案 15 :(得分:0)

前两个边界默认为0,序列的长度如前所述,跨度为-1表示切片应从右向左移动,而不是通常的从左向右移动。因此,其效果是颠倒顺序。

name="ravi"
print(name[::-1]) #ivar