【发布时间】:2012-02-28 00:47:40
【问题描述】:
我打开一个文件
line = file.readline()
并使用 line[0:2] 选择行中的前 3 个字符。
但奇怪的是,line[0:2] 只包含 2 个字符。
因此,我必须使用line[0:3] 来选择前 3 个字符,并且它可以工作
但是为什么呢?
我检查了文件,每行开头没有空格
有人知道这个
【问题讨论】:
标签: python string indexing readline
我打开一个文件
line = file.readline()
并使用 line[0:2] 选择行中的前 3 个字符。
但奇怪的是,line[0:2] 只包含 2 个字符。
因此,我必须使用line[0:3] 来选择前 3 个字符,并且它可以工作
但是为什么呢?
我检查了文件,每行开头没有空格
有人知道这个
【问题讨论】:
标签: python string indexing readline
这是来自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:2 中的 0)包含在内,第二个数字(0:2 中的 2)不包含。
这就像一个 C++/C# for 循环:
for (int n = i ; n < j ; n++)
{
...
}
而不是
for (int n = i ; n <= j ; n++)
顺便说一下(但稍微偏离主题):使用包含开始绑定和排他结束绑定是一种很好的做法。如果 i 和 j 相同,则不会遇到问题(即不执行 for 循环)。如果您需要倒数,请使用包含结束界限和排斥开始界限。
【讨论】:
因为您的切片从字符 0 之前到字符 2 之前。也就是说,从字符 0 之前到字符 1 之后。也就是说,前两个字符从字符 0 开始。
【讨论】:
在 Python 切片中,您指定第一个您想要的项目,然后是您不想要的第一个项目。
【讨论】: