2012-02-28 60 views
2

我打开一个文件从readline开始的字符串从1开始在python中?

line = file.readline() 并使用line[0:2]来选择该行中的第一3个字符。 但是,line[0:2]只包含2个字符。 因此,我必须使用line[0:3]来选择前3个字符,它的工作原理 但是为什么?

我检查的文件,没有空间在每行开头

任何人都知道这

+2

[good-primer-for-python-slice-notation](http://stackoverflow.com/questions/509211/good-primer-for-python-slice-notation) – RanRag 2012-02-28 00:53:30

回答

2

因为你从片字符0之前字符2,即由字符0之前之前去在字符1之后。即,以字符0开始的前两个字符。

+0

哦,我的英文!你的意思是“在字符0之前”,它是-1吗? – JJgogo 2012-02-28 00:59:32

+0

否。它是字符0之前的一个点,但在前一个字符之后。 – 2012-02-28 01:04:15

3

第一个数字(0中的0为2)是包含的,第二个数字(0的2中的2)是排他的。

它像一个C++/C#的for循环:中

for (int n = i ; n < j ; n++) 
{ 
     ... 
} 

代替

for (int n = i ; n <= j ; n++) 

顺便说(但稍微offtopic):这是很好的做法是使用一个具有包容性开始约束和排他性最终界限。如果我和j是一样的,你不会遇到问题(即for循环没有执行)。如果您需要向后计数,则使用包含的结束界限和独占开始界限。

5

下面是Python's tutorial(读它,它的好!)说明:

一种方式来记住片的工作是怎么想的指数为字符之间的指点下,第一个字符的左边缘编号为0接着的n个字符的字符串的最后一个字符的右边缘具有索引n,例如:

+---+---+---+---+---+ 
| H | e | l | p | A | 
+---+---+---+---+---+ 
0 1 2 3 4 5 
-5 -4 -3 -2 -1 

号码的第一行给出了索引为0的字符串中的位置... 5;第二行给出相应的负指数。从i到j的片段分别由标记为i和j的边缘之间的所有字符组成。

+0

我明白了。那真是很好的解释!我会阅读该教程! – JJgogo 2012-02-28 01:02:46

1

在Python切片中,您指定了您想要的第一个项目,然后是第一个项目不需要想要的。