让我先说一下我是Python的新手,来自Ruby,而且我对Python的工作原理没有太多具体的了解.
对于我目前的一个项目,我正在计算化学Django应用程序中创建一个新功能,该应用程序读入PDB然后对它们进行计算.在添加我的代码之后,我收到了一个错误,Python无法将其类型string化为a float,并查看了解析PDB的库.
我很快就对Python的切片符号的工作原理感到困惑.例如:
str = 'Hello this is Josh'
str[0:2] #=> 'He'
str[2] #=> 'l'
Run Code Online (Sandbox Code Playgroud)
我以为调用str[0:2]会导致这将是Hel,不是He,因为指数0以23大.
是否有一个原因,出现这种情况就这样了,为什么str[m:n]从给m到n-1,而不是从m到n?
它是这样的:
str[0:2] + str[2:4] == str[0:4]
Run Code Online (Sandbox Code Playgroud)
和
str[0:len(str)] == str
Run Code Online (Sandbox Code Playgroud)
一般来说,通常以这种方式定义数字集合; 包括第一个列出的数字,不包括第二个.
Esdgar Dijkstra 为这个约定和在0处启动数组索引的约定写了一个相当着名的参数.