赞
踩
Python 中对字符串、列表、元组等序列类型数据
的通过下标索引访问以及简洁高效的切片操作都是通过由解释器调用的该对象的魔法方法__getitem__()
实现的。
a = ['a', 'b', 'c', 'd', 'e']
以下两个操作等效
>>> a[1]
'b'
>>> a.__getitem_(1)
'b'
类似于range()
,切片的三个参数分别代表开始索引、结束索引和步长值。参数间使用:
分隔开。即
[start: end: step]
下面以列表进行演示。
a = [1, 3, 5, 8, 10, 13, 18, 36]
>>> a[:]
[1, 3, 5, 8, 10, 13, 18, 36]
>>> a[::]
[1, 3, 5, 8, 10, 13, 18, 36]
>>> a[-6: -2]
[5, 8, 10, 13]
>>> a[: : 2]
[1, 5, 10, 18]
>>> a[: : -1]
[36, 18, 13, 10, 8, 5, 3, 1]
>>> a[: : -2]
[36, 13, 8, 3]
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:3] = ['a','b','c']
>>> a
['a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]
>>> a[3:3] = ['a','b','c']
>>> a
[0, 1, 2, 'a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]
>>> a= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:0] = ['a','b','c']
>>> a
['a', 'b', 'c', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del a[3:6]
>>> a
[0, 1, 2, 6, 7, 8, 9]
当然,切片不仅仅能作用于列表,比如说,字符串
>>> s = "I&; d0L8aO#4VqwE89 fWU#$"
>>> s[: : 3]
'I LOVE U'
事实上,所有的序列类型数据都支持切片操作。
常见的序列类型有:字符串、列表、元组等。
list 切片类似 C 数组,多维度分别用[]
索引,单维度切片用:
,如:
>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> a[1][1:3]
[5, 6]
但是这样做第二个维度索引不起作用:
>>> a[1:3][0:2]
[[4, 5, 6], [7, 8, 9]]
把 list当作 ndarray 去 slice 也是不对的:
ndarray切片用一个”[]“里面加逗号的方式,如:
>>> a = np.round(np.random.rand(3,3)*10)
array([[9., 5., 1.],
[3., 1., 5.],
[2., 5., 5.]])
>>> a[1:3,0:2]
array([[3., 1.],
[2., 5.]])
这样做第二个维度索引不起作用:
>>> a[1:3][0:2]
array([[3., 1., 5.],
[2., 5., 5.]])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。