切片时,有没有一种方法可以从列表的末尾开始?

时间:2020-07-27 22:44:45

标签: python python-3.x slice

我的意思不是反转,而是切片最后几个元素,但是如果切片的长度比列表的长度更远,它将从头开始。

例如:

a = [1, 2, 3, 4, 5, 6]

然后,如果切片从索引4开始且长度为5个元素,则输出为:

[5, 6, 1, 2, 3]

感谢您的帮助:)

3 个答案:

答案 0 :(得分:4)

好吧,如果您愿意,可以使用itertools.cycleitertools.islice这样,如果切片超过列表的末尾,它将环绕到开始。

from itertools import cycle, islice

a = [1, 2, 3, 4, 5, 6]
start, length = 4, 5

print(list(islice(cycle(a), start, start+length)))

结果:

[5, 6, 1, 2, 3]

答案 1 :(得分:0)

这对您有用吗? n是切片列表的索引

n=4
print(a[n:] + a[:n-1])

结果如下:[5, 6, 1, 2, 3]

答案 2 :(得分:0)

您可以编写一些辅助函数来为您执行此操作:

def my_slice(lst, start, length):
    end = start + length
    if end <= len(lst):
        return lst[start:end]
    else:
        end -= len(lst)
        return lst[start:] + lst[:end]