在python中进行切片时,为什么要结束+;1/end-1不是end?
假设在python中进行切片时,为什么要结束+;1/end-1不是end?,python,python-3.x,list,Python,Python 3.x,List,假设s=“mrunal” 我想打印run 为此,我正在做print(s[1:4]) 但是在python中,为什么print(s[1:3])不可用 我只是想告诉大家,为什么切片中的end不是我们想要作为最后一个字符的索引 s="mrunal" 索引0=“m” 索引1=“r” 索引2=“u” 索引3=“n” 索引4=“a” 索引5=“l” 这里“n”的索引是3。为什么结束索引与s[1:3]不同?为什么它不具有包容性?为什么使用独占?编辑: Python,从0开始计数。这意味着如
s=“mrunal”
我想打印run
为此,我正在做print(s[1:4])
但是在python中,为什么print(s[1:3])
不可用
我只是想告诉大家,为什么切片中的end
不是我们想要作为最后一个字符的索引
s="mrunal"
索引0=“m”
索引1=“r”
索引2=“u”
索引3=“n”
索引4=“a”
索引5=“l”
这里“n”
的索引是3。为什么结束索引与s[1:3]
不同?为什么它不具有包容性?为什么使用独占?编辑:
Python,从0开始计数。这意味着如果你需要第一个字母,你就写0。第二个字母1以此类推
s="mrunal"
index 0 = "m"
index 1 = "r"
index 2 = "u"
index 3 = "n"
index 4 = "a"
index 5 = "l"
这意味着您需要从第二个字母(索引1)到第四个字母(索引4)这不是一个很好的答案,但在处理索引序列时,上界通常是排他性的,这意味着它不包括索引本身 为什么??我一直认为这是因为序列的最后一个索引比大小小一个,因此可以使用大小作为上界,而无需将其偏移1:
s[1:] == s[1:len(s)]
还请注意,范围
的行为也相同,其上限是独占的
这也不是Python特有的。许多语言使用排他性上界;特别是在处理序列索引时。除非您阅读其他内容,否则这是一件好事。阅读答案,它可能会消除您对切片的疑虑。这是否回答了您的问题?半开放间隔更容易推理。例如,
s[1:4]+s[4::==s
foo[0:5]
最多提供5个字符。切片通常是计算值foo[n:n+2]
最多提供2个<如果bar
为零,则code>foo[foo:foo+bar]将为您提供0个字符。这通常是最自然的做事方式。@dcg@TomMyddeltyn It没有提供我问题的答案为什么会这样?
我想这就是实际问题的答案:OP是问它为什么会这样工作,而不是它是如何工作的,所以复制品不相关。答案是这样的-为了与range()
保持一致,这反过来也是为了与较旧的编程语言保持一致,原因如下。@Carcigenicate但为什么它不采取end
,即使从零开始。正如我所看到的例子,为什么end+1不是directend?@MRUNALMUNOT我试图在“为什么”下解决这个问题。最后一个索引是size-1
,因此将其设为独占索引可以省去减去1的麻烦。这与其他语言中使用的循环的相同,正如您为字符所解释的那样,“n”
索引为3。为什么索引不被接受?您键入的最后一个字母(索引4)不被计数顺便说一句,有趣的事实:s=“mrunal”打印(s[0::2])
我上面在注释中的代码以跳过2“mua”的方式打印“mrunal”,那么,为什么它是独占的,而不是包含的呢?