[英]python slice() function vs slice notation - How to handle empty values in slice()?
该文档涵盖了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()
函数和切片符号都使用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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.