Python 通过切片理解字符串反转
我正在寻找一种向后打印字符串的方法,在谷歌上快速搜索后,我发现了这种方法: 假设Python 通过切片理解字符串反转,python,string,slice,Python,String,Slice,我正在寻找一种向后打印字符串的方法,在谷歌上快速搜索后,我发现了这种方法: 假设a是一个字符串变量。这将向后返回a字符串: a[::-1] 有人能解释一下它是如何工作的吗?它在Python中被称为切片表示法,您可以在这里了解它的工作原理: 这是: 在本例中,步骤-1表示向后,省略开始和结束表示您想要整个字符串。在本例中,-1”部分表示切片的“步骤”部分。在本例中,它一次通过字符串1个字符,但向后(负步骤表示从字符串的结尾开始)。例如,如果将步骤指定为2,则将从第一个字符开始获取字符串的其他每个
a
是一个字符串变量。这将向后返回a
字符串:
a[::-1]
有人能解释一下它是如何工作的吗?它在Python中被称为切片表示法,您可以在这里了解它的工作原理: 这是: 在本例中,步骤-1表示向后,省略开始和结束表示您想要整个字符串。在本例中,-1”部分表示切片的“步骤”部分。在本例中,它一次通过字符串1个字符,但向后(负步骤表示从字符串的结尾开始)。例如,如果将步骤指定为2,则将从第一个字符开始获取字符串的其他每个字符。如果您指定一个-2步,那么您将获得字符串的每一个其他字符,从最后一个字符开始并向后工作 简而言之,如果
a='12345'
:
变成a[::2]
135
变成a[:-1]
54321
变成a[::-2]
531
此功能是在Python 2.3.5中引入的,您可以在中阅读更多内容。当然,
[:]
是运算符。它允许您获取子字符串。基本上,它通过指定要作为[begin:end:step]的元素来工作,并且它适用于所有序列。关于它,有两个巧妙的地方:
- 您可以省略一个或多个元素,这样做是“正确的”
- 开始、结束和步骤的负数有意义
l = [1,2,3]
然后l[-1]
是3,l[-2]
是2,l[-3]
是1
对于步骤
参数,负数表示在序列中向后工作。对于列表:
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]给出了字符串a的一部分。完整语法是a[begin:end:step]
它给出了一个[begin]、[begin+step]、…一个[end-1]。当step为负值时,从end开始并移动到start
最后,begin默认为序列的开头,end to end,step to-1。字符串本质上是一个字符序列,因此切片操作可以对其进行操作。实际上,您所做的是:
->以1向后的步骤从开始到结束获取“a”的片段。我认为以下内容对于反向打印字符串更有意义,但可能这只是我的问题:
for char in reversed( myString ):
print( char, end = "" )
我会这样做:
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]
我们可以使用append和pop来完成它
def rev(s):
i = list(s)
o = list()
while len(i) > 0:
o.append(t.pop())
return ''.join(o)
基本步骤符号,考虑函数:
a[2:4:2]发生的情况是索引在位置2和4之间切片,第三个变量所做的是设置从第一个值开始的步长。在这种情况下,它将返回[2],因为[4]是一个上限,只有两个值返回,没有第二个步骤发生负运算符简单地反转阶跃输出。
不使用反或[::-],这里是一个基于递归的简单版本,我认为是最可读的:
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]
使用扩展切片语法
word = input ("Type a word which you want to reverse: ")
def reverse(word):
word = word[::-1]
return word
print (reverse(word))
可以使用reversed()函数。
比如说
x = "abcd"
for i in reversed(x):
print(i, end="")
print("\n")
L = [1,2,3]
for i in reversed(L):
print(i, end="")
打印
dcba
和321
前两个边界默认为0,序列长度如前所述,步幅为−1表示切片应该从右向左,而不是通常的从左向右。因此,其效果是颠倒顺序
name="ravi"
print(name[::-1]) #ivar
这是Python3在每次打印结束时不换行的方法。在Python2.x中,您可以只写print(char),当然,这会打印出字符串;它不会创建一个新字符串,而旧字符串反转('''.join(reversed(myString))。但是,确实如此。但是,OP只要求“打印”。因此是“打印”“解决方案。您可以一直这样做:”“.join(反向(myString0))来获取字符串。“正确的事情”在使用负步长/跨步时可能会有点混乱。”。当OP显然想知道
a[::-1]
为什么工作时,为什么你会建议一种反转字符串的替代方法?这不是相关的答案,请再次阅读该问题。另请参见:哪些方法解决了python的这一特性,有些人可能会觉得“古怪”。
name="ravi"
print(name[::-1]) #ivar