繁体   English   中英

python slice()函数与slice表示法-如何处理slice()中的空值?

[英]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] 
  • startend为空 (列表的副本)

     >>> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM