我是 Python 新手,我从一个简单的列表切片操作中得到的以下输出让我很困惑。
这是代码。
>>> a = [1,2,3,4];
>>> a[1:3]
[2, 3]
>>> a[3]
4
不应该a[1:3]
返回[2,3,4]
而不是[2,3]
?
a[1:3]
指定一个半封闭区间,这意味着它包括从第一个指定索引开始到但不包括在第二个索引处的值。
所以在这种情况下a[1:3]
意味着切片包括a[1]
and a[2]
,但不 a[3]
您在range()函数的使用中看到了相同的情况。例如
range(1, 5)
将生成一个从 1 到 4 的列表,但不包括 5。
这与许多编程语言的工作方式非常一致。
slice的文档可能会有所帮助。
slice([start], stop[, step])
返回一个切片对象,表示由 指定的索引集range(start, stop, step)
。
大多数人熟悉的切片格式只是一个简写:
a[start:stop:step]
切片最多返回(但不包括)第二个切片索引。
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.