我阅读了this question about slicing,以更好地理解Python中的切片,但是没有发现以简单的方式将切片对象的start
和stop
增加一个常数。 “简单”的意思是: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中添加数字以启动和停止切片对象的参数?
答案 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)
使用扩展索引语法时也会生成切片对象。例如: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]
但这有点难看...