为什么Python';s切片表示法从[m,n-1]开始?
让我先说一下,我是Python新手,来自Ruby,对于Python的工作原理我没有太多具体的知识 对于我当前的一个项目,我正在计算化学Django应用程序中创建一个新功能,它读取PDB,然后对它们进行计算。添加代码后,我遇到了一个错误,Python无法将为什么Python';s切片表示法从[m,n-1]开始?,python,Python,让我先说一下,我是Python新手,来自Ruby,对于Python的工作原理我没有太多具体的知识 对于我当前的一个项目,我正在计算化学Django应用程序中创建一个新功能,它读取PDB,然后对它们进行计算。添加代码后,我遇到了一个错误,Python无法将字符串类型转换为浮点,并查看了解析PDB的库 我很快就被Python的切片表示法的工作原理弄糊涂了。例如: str = 'Hello this is Josh' str[0:2] #=> 'He' str[2] #=> 'l' 我以
字符串
类型转换为浮点
,并查看了解析PDB的库
我很快就被Python的切片表示法的工作原理弄糊涂了。例如:
str = 'Hello this is Josh'
str[0:2] #=> 'He'
str[2] #=> 'l'
我以为调用str[0:2]
会得到Hel
,而不是He
,因为0
到2
的索引是3大
有没有这样的原因,为什么str[m:n]
从m
到n-1
,而不是从m
到n
str[0:2] + str[2:4] == str[0:4]
及
一般来说,以这种方式定义数字集是常规的;包括第一个列出的号码,不包括第二个
Esdgar Dijkstra写了这个约定,以及从0开始数组索引的约定。它是这样的:
str[0:2] + str[2:4] == str[0:4]
及
一般来说,以这种方式定义数字集是常规的;包括第一个列出的号码,不包括第二个
Esdgar Dijkstra写了这个约定,以及从0开始数组索引的约定。啊,我明白了。因此,切片表示法并不像Ruby那样将这两个数字视为一个包含的
[m,n]
范围,而是一个[m,n)
范围,这是我的主要困惑。此外,虽然你可能直觉上知道(认为)[0:2]
是长度3,但是[137:418]呢
?正如Dijkstra链接所指出的,Python方法的优点是n-m
是子序列的长度。(例如,[0:2]
是长度2-0=2
,[137:418]
是长度418-137=281
)啊,我明白了。因此切片表示法没有将这两个数字视为包含的[m,n]
范围和Ruby一样,但它是一个[m,n)
范围,这是我的主要困惑。此外,虽然你可能直观地知道(认为)[0:2]
是长度3,但是[137:418]呢
?正如Dijkstra链接所指出的,Python方法的优点是n-m
是子序列的长度。(例如,[0:2]
是长度2-0=2
,[137:418]
是长度418-137=281
)