【问题标题】:Is there a way to go from the end to the start of a list while slicing?切片时有没有办法从列表的末尾到开头?
【发布时间】:2020-07-27 22:44:45
【问题描述】:

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

例如:

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

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

[5, 6, 1, 2, 3]

任何帮助表示赞赏:)

【问题讨论】:

  • @Jab 这不是特别编程......

标签: python python-3.x slice


【解决方案1】:

如果你愿意,你可以使用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]

【讨论】:

    【解决方案2】:

    这对你有用吗? n 是对列表进行切片的索引

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

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

    【讨论】:

    • OP 询问有关使用长度和起始索引的问题。
    • 你不需要使用长度,尝试将n设置为大于列表的长度,它也可以工作
    • 我不是在谈论整个列表的长度。我的意思是,他们想要切片的长度。他们举了一个例子,原始列表的长度为 6,但他们只切出了其中的 5 个元素(2 个在末尾,3 个在开头)。
    【解决方案3】:

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

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2015-09-01
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多