Oge*_*gen 20 python reverse slice
如何在不省略开始和结束切片参数的情况下反转Python字符串?
word = "hello"
reversed_word = word[::-1]
Run Code Online (Sandbox Code Playgroud)
我知道这有效,但是如何通过指定开始和结束索引来获得结果呢?
word = "hello"
reversed_word = word[?:?:-1]
Run Code Online (Sandbox Code Playgroud)
很难向学生解释为什么要word[::-1]反转弦乐.如果我能给他们逻辑推理而不是"它是pythonic方式",那就更好了.
我解释的方式word[::1]如下:"你没有指定开始,所以它只是从一开始就开始.你没有指定结束,所以直到结束.现在步骤是1所以它只是从开始到最后1个字符由1." 现在,当我的学生看到word[::-1]他们会想到"我们没有指定开头或结尾,所以它一次会经过字符串-1个字符?"
hac*_*cks 15
其他一些反转字符串的方法:
word = "hello"
reversed_word1 = word[-1: :-1]
reversed_word2 = word[len(word)-1: :-1]
reversed_word3 = word[:-len(word)-1 :-1]
Run Code Online (Sandbox Code Playgroud)
您应该注意的切片符号的一件事a[i:j:k]是,省略i和j并不总是意味着i将成为0和j将成为len(s).这取决于的标志k.默认k是+1.
k是+已经那么的默认值i是0(从头开始).如果它是-ve然后的默认值i是-1(从端部开始). k是雾化+ ve然后的默认值j是len(s)(停止在端部).如果是-ve随后的默认值j是-(len(s)+1)(在开始停止). 现在您可以向学生解释如何Hello[::-1]打印olleH.
jkd*_*jkd 13
不太清楚为什么,但以下将返回相反的word:
word = "hello"
word[len(word):-(len(word)+1):-1]
Run Code Online (Sandbox Code Playgroud)
要么...
word = "hello"
word[len(word):-len(word)-1:-1]
Run Code Online (Sandbox Code Playgroud)
编辑(说明):
来自jedward的评论:
中间参数是最棘手的,但是一旦你意识到(a)切片开始/停止的负索引表明你想要从字符串的末尾"向后"计数,并且(b)停止索引是独占的,它就非常简单了,所以它会"计数",但在停止指数处停止.单词[len(word): - len(word)-1:-1]可能更清楚.
回应此评论:
第三个值实际上是增量,所以你告诉Python你想从最后一个字母开始然后返回所有(-1)st值到最后一个.
这是一张图(一分钟拉到一起):

该图显示我们也可以使用它:
word = "hello"
word[-1:-len(word)-1:-1] #-1 as the first
Run Code Online (Sandbox Code Playgroud)
从Python 2源代码,这是用三元表达式定义的:
Run Code Online (Sandbox Code Playgroud)defstart = *step < 0 ? length-1 : 0; defstop = *step < 0 ? -1 : length;
所以,当没有给出开始和停止时,
如果步骤是否定的:
如果步骤是肯定的:
所以回答这个问题:
如何通过指定开始和结束索引来获得结果?
要自己指定,请使用以下(放入函数以获得可重用性)
def my_slice(word, step):
'''slice word with only step'''
start = len(word)-1 if step < 0 else 0
stop = -len(word)-1 if step < 0 else len(word)
return word[start:stop:step]
word = "hello"
step = -1
my_slice(word, step)
Run Code Online (Sandbox Code Playgroud)
回报
'olleh'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1563 次 |
| 最近记录: |