文档涵盖了slice()对象的3种用法:
obj[:stop]
=obj[slice(stop)]
obj[start:stop]
=obj[slice(start, stop)]
obj[start:stop:step]
=obj[slice(start, stop, step)]
但是当我事先不知道物体的长度时,该怎么做呢?将stop
设置为非常高的值,例如2E32-1
?
obj[start:]
=obj[slice(start, 2E32-1)]
?obj[:]
=obj[slice(2E32-1)]
?
您可以将stop
参数设置为None
无限期继续。
obj = [1, 2, 3, 4]
obj[2:] == obj[slice(2, None)]
# == [3, 4]
obj[:] == obj[slice(None, None)]
# == [1, 2, 3, 4]
obj[::2] == obj[slice(None, None, 2)]
# == [1, 3]
您可以使用Python的slice()
函数以及切片符号提供的所有功能。在内部,slice()
函数和切片表示法都使用slice
对象。
在切片表示法your_list[start:stop:step]
中,传递空值,可以通过将该值作为None
传递来获得等效的slice
函数slice(start, stop, step)
。例如:
-
仅使用空
end
的start
>>> my_list = list(range(10)) # for demonstration purpose # start: `5` # end: empty - meaning end of the list >>> my_list[5:] [5, 6, 7, 8, 9] # use `end` as `None` >>> my_list[slice(5, None)] [5, 6, 7, 8, 9]
-
仅使用空
start
的end
>>> my_list[:5] [0, 1, 2, 3, 4] >>> my_list[slice(5)] [0, 1, 2, 3, 4] # OR >>> my_list[slice(None, 5)] [0, 1, 2, 3, 4]
-
start
和end
都为空(列表副本)>>> my_list[:] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> my_list[slice(None, None)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
再举几个例子:
# with both `start` and `end`
>>> my_list[2:5]
[2, 3, 4]
>>> my_list[slice(2, 5)]
[2, 3, 4]
# with `start`, `end` and `step`
>>> my_list[2:5:3]
[2]
>>> my_list[slice(2, 5, 3)]
[2]
# To reverse list
# with empty `start` and `end`, and `step` as `-1`
>>> my_list[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> my_list[slice(None, None, -1)]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]