Python允许您"切片"各种容器类型; 这是对有序集合进行一些子集合的简写表示法.例如,如果您有一个列表
foo = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
你想要第二,第三和第四个元素,你可以这样做:
foo[1:4]
Run Code Online (Sandbox Code Playgroud)
如果省略切片中的某个数字,则默认为列表的开头.所以举个例子
foo[1:] == [2,3,4,5]
foo[:4] == [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
当然,如果您省略切片中的两个数字,您将获得整个列表!但是,您将获得列表的副本而不是原始列表; 实际上,这是复制列表的标准符号.注意区别:
>>> a = [1,2,3,4]
>>> b = a
>>> b.append(5)
>>> a
[1, 2, 3, 4, 5]
>>>
>>> a = [1,2,3,4]
>>> b = a[:]
>>> b.append(5)
>>> a
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为b = atell b指向同一个对象a,因此追加b与追加相同a.复制列表a可以避免这种情况.请注意,这只会运行一个深层次的间接 - 如果a包含一个列表,比如说,并且您附加到该列表中b,您仍然会更改a.
顺便说一下,切片有一个可选的第三个参数,它是一个步骤参数 - 它允许你在大于1的跳转中移动列表.所以你可以写范围(100)[0 :: 2]所有偶数高达100.