如何在Python中添加数字以开始和停止切片对象?

时间:2019-05-16 12:45:36

标签: python slice

我阅读了this question about slicing,以更好地理解Python中的切片,但是没有发现以简单的方式将切片对象的startstop增加一个常数。 “简单”的意思是:a)在同一行 中,b)在一个地方中,c)没有一个额外的变量。

['a', 'b', 'c', 'd', 'e'][0:2]         #works
['a', 'b', 'c', 'd', 'e'][(0:2)+1]     #does not work, what I would find most convenient
['a', 'b', 'c', 'd', 'e'][(0+1):(2+1)] #works, but needs a change at two places
i = 1
['a', 'b', 'c', 'd', 'e'][(0+i):(2+i)] #works but needs an extra line and variable

在切片级别,slice(0, 2, 1)+1"unsupported operand type(s) for +: 'slice' and 'int'"起不起作用。那么,如何以简单的方式在Python中添加数字以启动和停止切片对象的参数?

3 个答案:

答案 0 :(得分:2)

为避免两次写+i,您可以做类似的事情

my_list[i:][:length]

示例:

i = 2
length = 3
print(['0', '1', '2', '3', '4', '5', '6', '7'][i:][:length])

--> output: ['2', '3', '4']

答案 1 :(得分:0)

我建议您更仔细地研究文档:herehere

  

使用扩展索引语法时也会生成切片对象。例如:a [start:stop:step]或a [start:stop,i]

NgOnInit不是有效的列表切片语法

['a', 'b', 'c', 'd', 'e'][(0:2)+1]

您的最后一个示例是将slice的start和stop参数增加一个常数的正确方法

In [5]: ['a', 'b', 'c', 'd', 'e'][(0:2)+1]                                                                                                                                                              
  File "<ipython-input-5-e80370dcbb31>", line 1
    ['a', 'b', 'c', 'd', 'e'][(0:2)+1]
                                ^
SyntaxError: invalid syntax

或者只是将其包装在函数周围

In [10]: ['a', 'b', 'c', 'd', 'e'][0:2]                                                                                                                                                                 
Out[10]: ['a', 'b']

In [12]: i = 1                                                                                                                                                                                          

In [13]: ['a', 'b', 'c', 'd', 'e'][0+i:2+i]                                                                                                                                                             
Out[13]: ['b', 'c']

In [14]: ['a', 'b', 'c', 'd', 'e'][1:3]                                                                                                                                                                 
Out[14]: ['b', 'c']

评论中@Heike的另一个解决方案是

In [18]: def func(li, start, stop, const): 
    ...:     return li[start+const: stop+const] 
    ...:                                                                                                                                                                                                

In [19]: func(['a', 'b', 'c', 'd', 'e'],0,2,1)                                                                                                                                                          
Out[19]: ['b', 'c']

答案 2 :(得分:0)

没有办法实现这一目标。如果您真的只想一行,那么仍然可以:

x=1; l[x:x+2]

但这有点难看...