从python文档docs.python.org/tutorial/introduction.html#strings:
切片索引具有有用的默认值; 省略的第一个索引默认为零,省略的第二个索引默认为要切片的字符串的大小.
对于标准情况,这很有意义:
>>> s = 'mystring'
>>> s[1:]
'ystring'
>>> s[:3]
'mys'
>>> s[:-2]
'mystri'
>>> s[-1:]
'g'
>>>
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,使用负步长值似乎表明默认值略有不同:
>>> s[:3:-1]
'gnir'
>>> s[0:3:-1]
''
>>> s[2::-1]
'sym'
Run Code Online (Sandbox Code Playgroud)
很好,如果步骤为负,则默认值相反.省略的第一个索引默认为要切片的字符串的大小,省略的第二个索引默认为零:
>>> s[len(s):3:-1]
'gnir'
Run Code Online (Sandbox Code Playgroud)
看起来不错!
>>> s[2:0:-1]
'sy'
Run Code Online (Sandbox Code Playgroud)
哎呦.错过了'我'.
然后是每个人最喜欢的字符串反向声明.它很甜蜜:
>>> s[::-1]
'gnirtsym'
Run Code Online (Sandbox Code Playgroud)
然而:
>>> s[len(s):0:-1]
'gnirtsy'
Run Code Online (Sandbox Code Playgroud)
切片永远不会包含切片中第二个索引的值.我可以看到这样做的一致性.
所以我想我开始理解切片在各种排列中的行为.但是,我感觉第二个索引有点特殊,并且负步骤的第二个索引的默认值实际上不能用数字来定义.
任何人都可以简明地定义可以解释所提供示例的默认切片索引吗?文档将是一个巨大的优势.
实际上没有任何默认值; 省略的值是专门处理的.
但是,在每种情况下,省略的值恰好以与None完全相同的方式处理.这意味着,除非你黑客攻击的解释(或使用parser,ast等模块),你可以假装默认值是无(递归的回答说),你会始终得到正确的答案.
引用的非正式文档并不十分准确 - 这对于那些本来应该成为教程一部分的内容来说是合理的.对于真正的答案,您必须转向参考文档.
对于2.7.3,序列类型描述了注释3,4和5中的切片.
用于[i:j]:
...如果我被省略或
None使用0.如果省略j或None,请使用len(s).
并为[i:j:k]:
如果省略i或j
None,则它们变为"结束"值(其结束取决于k的符号).注意,k不能为零.如果k是None,它被视为1.
对于3.3,序列类型具有与2.7.3完全相同的措辞.
结束值总是独占的,因此 0 结束值意味着包括索引 1 但不包括 0。使用 None 代替(因为负数有不同的含义):
>>> s[len(s)-1:None:-1]
'gnirtsym'
Run Code Online (Sandbox Code Playgroud)
还要注意起始值;最后一个字符索引在len(s) - 1; 你也可以拼写为-1(因为负数是相对于长度来解释的):
>>> s[-1:None:-1]
'gnirtsym'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2043 次 |
| 最近记录: |