Please explain Python sequence reversal
不知道我是从哪里捡来的,但它卡住了,我一直在用它。
有人能解释一下这个字符串反转是如何工作的吗?我使用它来测试回文字符串,而不首先将其转换为可变类型。
1 2 3 4 | >>> word ="magic" >>> magic = word[::-1] >>> magic 'cigam' |
我会尽我所能的猜测,但我不想带着任何关于这个有用技巧背后内在的先入为主的想法。
切片符号如下:
1 | my_list[start:end:step] |
所以,当你做
start 无(默认)end 无(默认)step :-1(下降顺序)
小精灵
所以,您将从列表的末尾(默认)转到第一个元素(默认),将索引减少一个(-1)。
所以,正如许多答案所说,没有排序,也没有就地交换,只是切片符号。
你可以在这里看看-这是一个扩展的部分。
"Python2.3的新功能",第15节,"扩展片"。
这个"技巧"只是对序列应用切片操作的一个特殊实例。您也可以使用它来生成列表或元组的反向副本。同一个家族的另一个"把戏":
"Python2.3的新特性"是进入迷宫的意外入口。让我们从一个更明显的开始(?)放置,序列对象的当前2.x文档。
在序列运算表中,您将看到一行operation=s[i:j:k],result="slice of s from i to j with step k",notes="(3)(5)"。
注3表示"如果i或j为负,则索引相对于字符串的结尾:用len(s)+i或len(s)+j替换。但请注意-0仍然是0。"
注5表示"从i到j的s切片(步骤k)被定义为索引x=i+n*k的项目序列,这样0<=n<(j-i)/k。换句话说,索引为i、i+k、i+2*k、i+3*k等,到达j时停止(但不包括j)。如果i或j大于len(s),则使用len(s)。如果省略i或j或不省略,它们将成为"结束"值(结束取决于k的符号)。注意,k不能为零。如果k不是,则按1处理。"
我们有k=-1,所以使用的指数是i,i-1,i-2,i-3等等,当达到j时停止(但不包括j)。为了获得观察到的效果,i的"end"值必须是
另一个切入点是考虑如果
1 2 3 | def reverse_traversal_of_sequence(s): for x in range(len(s) - 1, -1, -1): do_something_with(s[x]) |
号