我怎样才能在变量中使用冒号(:)

gio*_*aia 8 python variables list python-3.x

我想写这样的代码:

index = 0:2
print(list[index])
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

有什么办法可以将[...:...]语法的所有部分存储在变量中吗?

Mar*_*ers 18

你想要一个slice()对象:

index = slice(0, 2)
print(somelist[index])
Run Code Online (Sandbox Code Playgroud)

slice()将您可以在[start:stop:stride]订阅语法中指定的开始,停止和步幅值建模 为对象.

从文档:

返回表示由指定的索引集的切片对象range(start, stop, step).start和step参数默认为None.切片对象具有只读数据属性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)
Run Code Online (Sandbox Code Playgroud)

一个可行的替代方案是将start和stop存储为单独的值:

startindex = 0
stopindex = 2
print(somelist[start:stop])
Run Code Online (Sandbox Code Playgroud)

  • @leaf:如果你想一次模拟`-2:`,另一个模拟`:4`怎么办? (2认同)
  • @leaf:你的方法,`index = -2`和`somelist [index:]`限制你只做起点变量.你可以使用*three*变量,分别用于start,stop和stride,然后在任何地方使用`somelist [start:stop:stride]`,但这非常详细.在这里使用`slice()`对象要优雅得多. (2认同)

Mos*_*oye 11

您可以改为创建一个slice对象:

index = slice(0,2)
print(lst[index])
Run Code Online (Sandbox Code Playgroud)

注意不要使用list名称来避免阴影内置list函数.

来自文档:

slice(start, stop[, step])

返回表示由指定的索引集的切片对象 range(start, stop, step)