我正在寻找一种向后打印字符串的方法,在google上快速搜索后,我发现此方法:在Python中反转字符串
假设'a'是一个字符串变量。这将返回'a'字符串:
a[::-1]
任何人都可以解释它是如何工作的?
我正在寻找一种向后打印字符串的方法,在google上快速搜索后,我发现此方法:在Python中反转字符串
假设'a'是一个字符串变量。这将返回'a'字符串:
a[::-1]
任何人都可以解释它是如何工作的?
诚然,[::]
是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]
意味着通过向后走过字符串来连接字符来构建字符串。
使用负向步进/步幅时,“正确的”可能会有点混乱。 [示例在这里](http://stackoverflow.com/q/399067/936083)。 – Darthfett 2012-03-07 22:49:54
这就是所谓的切片符号在Python中,你可以阅读更多一点它是如何工作在这里:
“-1”部分表示切片的“step”部分 - 在这种情况下,它一次经过字符串1字符,但是向后(负的步骤意味着从字符串的末尾开始) 。例如,如果将步骤指定为2,则会从第一个字符开始,获取字符串的其他任何字符。如果你指定了一个-2的步长,那么你会得到字符串的其他所有字符,从最后一个字符开始并向后工作。
因此,概括地说,如果a = '12345'
:
a[::2]
成为135
a[::-1]
成为54321
a[::-2]
成为531
它使用扩展切片 - 一个字符串,是一个序列在Python中,并与其他序列共享一些方法(na mely列表和元组)。有三部分切片 - 开始,停止和步骤。它们都有默认值 - 默认值为0,默认为len(sequence),step默认值为1.通过指定[:: - 1],你会说“从头开始的所有元素,到最后一次后退一会。
此功能在Python 2.3.5介绍,你可以在What's New docs阅读更多。
[:: - 1]给出了字符串a的一部分。完整的语法是a[begin:end:step]
它给出了一个[begin],一个[begin + step],... a [end-1]。如果步骤是否定的,则从头开始并开始。
最后,开始默认为序列的开始,结束并且步进到-1。
一个字符串本质上是一个字符序列,所以切片操作对它起作用。你正在做的事实上是:
- >从1开始到结尾以1为单位逐步得到一片'a'。
我认为有以下使得在反向打印字符串多一点感觉,但也许这只是我:
for char in reversed(myString):
print(char, end = "")
那是'end =“”'的意思吗? – 2009-04-19 23:52:04
这是python 3在每次打印结束时都不换行的方式。 在python 2.x中,你可以直接写 print(char,) – 2009-04-20 02:06:22
我会做这样的:
variable = "string"
message = ""
for b in variable:
message = b+message
print (message)
和它打印: gnirts
考虑下面的列表
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]
我们可以利用追加和流行做
def rev(s):
i = list(s)
o = list()
while len(i) > 0:
o.append(t.pop())
return ''.join(o)
它的基本步符号,考虑的功能:
一个[ 2:4:2]
会发生什么情况是索引在位置2和4之间切片,第三个变量的作用是设置从第第一价值。在这种情况下,它会返回一个[2],因为[4]是一个上限,只有两个值返回并且没有第二步发生。 ( - )减号运算符简单地反转步骤输出。
不使用逆转或[:: - 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]
**请seealso **:HTTP://计算器.com/a/33457266/42223,它解决了python的这个特性,有些人可能会发现“古怪”。 – dreftymac 2015-12-02 11:08:40