我想写这样的代码:
index = 0:2
print(list[index])
但这不起作用。
有什么办法可以将[...:...]
语法的所有部分存储在变量中吗?
答案 0 :(得分:19)
您需要slice()
object:
index = slice(0, 2)
print(somelist[index])
slice()
将您可以在[start:stop:stride]
订阅语法中指定的开始,停止和步幅值建模为对象。
来自文档:
返回表示
range(start, stop, step)
指定的索引集的slice对象。开始和步骤参数默认为None
。 Slice对象具有只读数据属性start
,stop
和step
,它们只返回参数值(或它们的默认值)。
在幕后,Python实际上在调用自定义slice()
方法时将订阅转换为__getitem__
对象:
>>> class Foo(object):
... def __getitem__(self, item):
... return item
...
>>> Foo()[42:81:7]
slice(42, 81, 7)
>>> Foo()[:42]
slice(None, 42, None)
一个可行的替代方案是将开始和停止存储为单独的值:
startindex = 0
stopindex = 2
print(somelist[start:stop])
答案 1 :(得分:11)
您可以改为创建slice
对象:
index = slice(0,2)
print(lst[index])
注意不要使用list
作为名称,以避免隐藏内置list
功能。
来自文档:
slice(start, stop[, step])
返回表示由指定的索引集的切片对象
range(start, stop, step)