1

因此,假设我的代码类似于:

x = 'foobar'

我想打印前半部分(foo),然后是第二部分(bar)。有人会认为它要么像列表中的第一项一样将第一个字母计数为“0” -

x = 'foobar'
print x[0:2]
print x[3:5]

- 或将第一个字母计为“1”:

x = 'foobar'
print x[1:3]
print x[4:6]

但是通过一些反复试验,我发现第一个值(“:”之前的那个)从 0 开始计数,而第二个值(“:”之后的那个)从 1 开始计数。所以正确的
代码是:

x = 'foobar'
print x[0:3]
print x[3:6]

我现在明白了,但这是为什么呢?有什么原因吗?

4

3 回答 3

4

我理解你为什么会感到困惑,但是一旦你习惯了它就会变得有意义。如果有意义的话,我喜欢将数字视为您进行剪辑的元素之间的空间。

      0 --- 1 --- 2 --- 3 --- 4 --- 5 --- 6
str = [  f     o     o     b     a     r  ]

           0 --- 1 --- 2 --- 3
str[0:3] = [  f     o     o  ]

           3 --- 4 --- 5 --- 6
str[3:6] = [  b     a     r  ]
于 2013-06-14T08:51:41.393 回答
1

实际上,范围的第二个元素指向我们要从str. 想象一下,for (i = 0; i < 3; ++i) ...好像我可以这样表达:-)

于 2013-06-14T08:25:31.440 回答
0

也许最好用数学符号来思考:

x[a:b]
x[i], i ∈ [a, b)
x[i], a <= i < b

负数从末尾开始计数,例如:

x[-1]  # last element
x[:-1]  # all except last
x[1:-1]  # all except first and last

我希望这种思维方式能有所帮助!

于 2013-06-14T08:37:39.223 回答