Python,使用 slice() 对象获取最后一个元素

anv*_*erx 5 python slice

如何创建一个 slice() 对象,以便它包含列表/字符串的最后一个元素

s = 'abcdef'
s[slice(2,4)]
Run Code Online (Sandbox Code Playgroud)

工作正常。
假设我想获取从第二个到最后的元素,相当于s[2:]

s[slice(2)]      # only gives first two elements, argument is interpreted as the end of the range
s[slice(2,)]     # same as above
s[slice(2, -1)]  # gives a range from second to the end excluding the last element
s[slice(2, 0)]   # gives empty as expected,  since end of range before the start
Run Code Online (Sandbox Code Playgroud)

我可以使用 专门获取最后一个元素slice(-1, -2, -1),这对于多个元素将无法正常工作。

Ama*_*aur 6

如果您想包含最后一个元素,可以通过以下两种方式执行此操作:

s[slice(2,6)]
Run Code Online (Sandbox Code Playgroud)

或将 6 替换为 len(s)

或者你也可以这样做:

s[slice(2,None)]
Run Code Online (Sandbox Code Playgroud)


And*_*ely 2

你可以用魔法方法测试一下__getitem__。最后一个对象可以通过以下方式获取slice(-1, None, None)

s = 'abcdef'

class A:
    def __getitem__(self, v):
        print(v)

a = A()
a[-1:]

print("s[-1:] = ", s[-1:])
print("s[slice(-1, None, None)] = ", s[slice(-1, None, None)])
Run Code Online (Sandbox Code Playgroud)

印刷:

slice(-1, None, None)
s[-1:] =  f
s[slice(-1, None, None)] =  f
Run Code Online (Sandbox Code Playgroud)