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

时间:2018-02-16 00:26:36

标签: python

文档涵盖了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)]

2 个答案:

答案 0 :(得分:5)

您可以将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]

答案 1 :(得分:2)

您可以使用Python的slice()函数以及切片符号提供的所有功能。在内部,var keys = ['Jan 2016', 'Feb 2016', 'Mar 2016']; var values = ['janData', 'febData', 'marData']; var dataMap = {}; keys.forEach(function(k, i){ dataMap[k] = values[i]; }) console.log(dataMap);函数和切片表示法都使用slice对象。

在您传递空值的切片表示法 slice()中,您可以通过将该值传递为{{1}来获得等效的your_list[start:stop:step]函数slice }}。例如:

  • 仅使用slice(start, stop, step)None

    start
  • 仅使用end>>> 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]

    end
  • start>>> 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