python 从字符串创建切片对象
我想从一个字符串创建一个切片对象;现在唯一的方法似乎是通过一个麻烦的eval语句。
class getslice:
def __getitem__(self, idx): return idx[0]
eval("getslice()[%s, 1]" %(":-1"))
提前谢谢你。
编辑:抱歉如果最初的问题不够清楚,这里的输入是 ":-1"。我的意思是要解析这个字符串。Ignacio Vazquez-Abrams的回答至少解决了这个问题(而且似乎也适用于反向索引),但我觉得我上面的解决方案虽然不够简洁,但更清晰(并且如果Python将来改变切片语法,它也会正确工作)。
11 个回答
3
如果你想要一个切片对象,为什么不直接创建一个呢?
s = slice(start, stop, step)
你说的“从字符串创建它”是什么意思呢?
6
slice(*map(lambda x: int(x.strip()) if x.strip() else None, mystring.split(':')))
对于单个参数的切片,比如 '-1'
或 '1'
,当 mystring.split(':')==1
时,你只需要调用 int(x)
。
应要求,将其从评论区提取出来。
3
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程就像是从冰箱里拿食材,然后用这些食材做饭一样。
当我们获取数据时,可能会遇到一些问题,比如数据格式不对,或者数据不完整。这就像是你打开冰箱,发现食材坏了,或者缺少了某些东西,导致你没法做出想要的菜。
为了避免这些问题,程序员通常会在代码中加入一些检查,确保数据是正确的。这就像是在做饭之前,先检查一下冰箱里的食材是否新鲜,是否足够。
总之,处理数据就像做饭一样,需要仔细检查和准备,才能做出美味的菜肴。
slice(*[{True: lambda n: None, False: int}[x == ''](x) for x in (mystring.split(':') + ['', '', ''])[:3]])