reverse a string in Python
我在寻找一种向后打印字符串的方法,在Google上快速搜索之后,我发现了以下方法:
假设"a"是字符串变量。这将使"a"字符串向后返回:
1 | a[::-1] |
有人能解释一下这是怎么回事吗?
当然,
- 您可以省略一个或多个元素,它执行"正确的操作"
- 开始、结束和步骤的负数有意义
对于开始和结束,如果给出一个负数,则意味着从序列的末尾开始计数。例如,如果我有一个列表:
1 | l = [1,2,3] |
则
对于
1 | l = [1,2,3,4,5,6,7,8,9,10] |
您可以编写
我已经给出了带有列表的示例,但是字符串只是另一个序列,工作方式相同。因此,
"-1"部分表示切片的"步骤"部分,在本例中,它一次通过字符串1字符,但向后(负步骤表示从字符串末尾开始)。例如,如果将步骤指定为2,则将从第一个字符开始获取字符串的其他所有字符。如果指定步骤为-2,则会得到字符串的所有其他字符,从最后一个字符开始,然后向后工作。
因此,简而言之,如果
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的一部分。完整语法是
最后,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="") |
打印
使用扩展切片语法
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] |