gpt4 book ai didi

python - 默认切片索引 *真的* 是什么?

转载 作者:太空狗 更新时间:2023-10-29 19:34:51 26 4
gpt4 key购买 nike

来自 python 文档 docs.python.org/tutorial/introduction.html#strings :

Slice indices have useful defaults; an omitted first index defaults to zero, an omitted second index defaults to the size of the string being sliced.

对于标准情况,这很有意义:

>>> s = 'mystring'
>>> s[1:]
'ystring'
>>> s[:3]
'mys'
>>> s[:-2]
'mystri'
>>> s[-1:]
'g'
>>>

到目前为止,还不错。但是,使用负步长值似乎暗示默认值略有不同:

>>> s[:3:-1]
'gnir'
>>> s[0:3:-1]
''
>>> s[2::-1]
'sym'

好吧,也许如果步长为负,则默认值相反。省略的第一个索引默认为被切片的字符串的大小,省略的第二个索引默认为零:

>>> s[len(s):3:-1]
'gnir'

看起来不错!

>>> s[2:0:-1]
'sy'

糟糕。错过了那个'm'。

然后就是大家最喜欢的字符串反转语句了。甜蜜的是:

>>> s[::-1]
'gnirtsym'

但是:

>>> s[len(s):0:-1]
'gnirtsy'

切片从不包含切片中第二个索引的值。我可以看到这样做的一致性。

所以我想我开始理解 slice 在其各种排列中的行为。但是,我感觉第二个索引有些特殊,负步的第二个索引的默认值实际上不能用数字来定义。

任何人都可以简明地定义可以解释所提供示例的默认切片索引吗?文档将是一个巨大的优势。

最佳答案

实际上没有任何默认值;省略的值被特殊处理。

然而,在任何情况下,省略值的处理方式恰好与 None 完全相同。这意味着,除非你正在破解解释器(或使用 parserast 等模块),否则你可以假装默认值为 None(作为递归的answer 说),你总能得到正确的答案。

引用的非正式文档不太准确——这对于本应作为教程一部分的内容来说是合理的。要获得真正的答案,您必须求助于引用文档。

对于 2.7.3,Sequence Types在注释 3、4 和 5 中描述了切片。

对于[i:j]:

… If i is omitted or None, use 0. If j is omitted or None, use len(s).

对于[i:j:k]:

If i or j are omitted or None, they become “end” values (which end depends on the sign of k). Note, k cannot be zero. If k is None, it is treated like 1.

对于 3.3,Sequence Types与 2.7.3 的措辞完全相同。

关于python - 默认切片索引 *真的* 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12521798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com