首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从列表中返回子列表,其中最后一个元素链接回起始索引到列表中

从列表中返回子列表,其中最后一个元素链接回起始索引到列表中
EN

Stack Overflow用户
提问于 2018-11-09 09:49:02
回答 6查看 745关注 0票数 2

如何从返回三个连续元素的列表返回子列表,其中最后一个元素链接到第一个给定的索引到列表中?

例如,给定list = [1,2,3,4,5]的索引list = [1,2,3,4,5],将返回[4,5,1]。或者给定带list = [1,2,3,4,5]的索引[5,1,2],则返回[5,1,2]

我有以下选择:

代码语言:javascript
复制
1. return list[index:] + list[:index+3]
2. return list[index:index+3] + list[:len(list)-index]
3. return list[index+3:] + list[:len(list)-index]
4. return list[index:index+3] + list[:max(0 , -1*(len(list)-index-3))]
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-11-09 09:52:06

%的典型用例

代码语言:javascript
复制
lst = [1,2,3,4,5]  # do not shadow built-in 'list'

i = 3
[lst[x % len(lst)] for x in range(i, i+3)]
# [4, 5, 1]

i = 4
[lst[x % len(lst)] for x in range(i, i+3)]
# [5, 1, 2]

从您给定的选项来看,最后一个选项(4)是产生相同结果的结果:

代码语言:javascript
复制
lst[i:i+3] + lst[:max(0 , -1*(len(lst)-i-3))]

你可以很容易地通过简单的尝试来确认这一点;)

票数 4
EN

Stack Overflow用户

发布于 2018-11-09 09:53:41

这可以很容易地使用np.roll实现。

代码语言:javascript
复制
lst = [1,2,3,4,5]

def roll_n(x, index, length=3):
    return np.roll(x,-index)[:length].tolist()

roll_n(lst,3)
[4, 5, 1]

roll_n(lst,4)
[5, 1, 2]
票数 1
EN

Stack Overflow用户

发布于 2018-11-09 09:56:33

您可以从文档中使用循环

使迭代器从迭代器返回元素,并保存每个元素的副本。当可迭代耗尽时,从保存的副本中返回元素。

代码:

代码语言:javascript
复制
from itertools import cycle, islice

lst = [1, 2, 3, 4, 5]


def get(l, index, length=3):
    return list(islice(cycle(l), index, index + length))


print(get(lst, 3))
print(get(lst, 4))

输出

代码语言:javascript
复制
[4, 5, 1]
[5, 1, 2]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53223351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档