2

我是 Python 新手,我从一个简单的列表切片操作中得到的以下输出让我很困惑。

这是代码。

>>> a = [1,2,3,4];
>>> a[1:3]
[2, 3]

>>> a[3]
4

不应该a[1:3]返回[2,3,4]而不是[2,3]?

4

4 回答 4

9

a[1:3]指定一个半封闭区间,这意味着它包括从第一个指定索引开始到但不包括第二个索引处的值。

所以在这种情况下a[1:3]意味着切片包括a[1]and a[2],但 a[3]

您在range()函数的使用中看到了相同的情况。例如

 range(1, 5)

将生成一个从 1 到 4 的列表,但包括 5。

这与许多编程语言的工作方式非常一致。

于 2012-07-09T21:05:53.170 回答
1

slice的文档可能会有所帮助。

slice([start], stop[, step])
返回一个切片对象,表示由 指定的索引集range(start, stop, step)

大多数人熟悉的切片格式只是一个简写:

a[start:stop:step] 
于 2012-07-09T21:12:05.347 回答
1

切片最多返回(但不包括)第二个切片索引。

于 2012-07-09T21:06:07.943 回答
0

You've got some good answers about how it works, here's one with why:

a = '0123456789' a[2:4] '23' a[4:6] '45' a[6:8] '67'

IOW, it makes it easy to step through a list or string or tuple n characters at a time, without wasting time on the +1 / -1 stuff needed in most languages.

于 2012-07-09T21:52:47.457 回答