Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python';s切片表示法从[m,n-1]开始?_Python - Fatal编程技术网

为什么Python';s切片表示法从[m,n-1]开始?

为什么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' 我以

让我先说一下,我是Python新手,来自Ruby,对于Python的工作原理我没有太多具体的知识

对于我当前的一个项目,我正在计算化学Django应用程序中创建一个新功能,它读取PDB,然后对它们进行计算。添加代码后,我遇到了一个错误,Python无法将
字符串
类型转换为
浮点
,并查看了解析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