python从字符串创建切片对象

gat*_*ado 7 python indexing slice

我想从字符串创建切片对象; 现在唯一的方法似乎是通过一个繁琐的hacky eval声明

class getslice:
    def __getitem__(self, idx): return idx[0]
eval("getslice()[%s, 1]" %(":-1"))
Run Code Online (Sandbox Code Playgroud)

提前致谢.

编辑:对不起,如果原始提示不清楚,则在这种情况下输入为": - 1".关键在于解析字符串.Ignacio Vazquez-Abrams的回答至少解决了这个问题(并且似乎也适用于反向索引),但我认为如果不是在概念上干净,我上面的解决方案仍然更清晰(如果Python改变了切片语法,它将正常工作).

ppr*_*mek 6

slice(*map(lambda x: int(x.strip()) if x.strip() else None, mystring.split(':')))

对于单个参数切片'-1'左右,'1'mystring.split(':')==1您只是调用时int(x)

根据要求,将其从评论部分中删除。


Ign*_*ams 3

slice(*[{True: lambda n: None, False: int}[x == ''](x) for x in (mystring.split(':') + ['', '', ''])[:3]])
Run Code Online (Sandbox Code Playgroud)

  • 这有点错误,例如 '1:1:1:1' 不是正确的切片字符串,而 '1:1:1' 是。应该更多这样的东西: slice(*map(lambda x: int(x.strip()) if x.strip() else None, mystring.split(':'))) (11认同)
  • pprzemek,你的评论包含了我认为最好的答案,你为什么不从中做出真正的答案呢? (2认同)