Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过切片理解字符串反转_Python_String_Slice - Fatal编程技术网

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中的一个序列,与其他序列(即列表和元组)共享一些方法。切片分为三个部分:开始、停止和步骤。它们都有默认值-开始默认值为0,停止默认值为len(序列),步骤默认值为1。指定[::-1]表示“序列a中的所有元素,从开始到结束,一次向后一个


此功能是在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