如何从返回三个连续元素的列表返回子列表,其中最后一个元素链接到第一个给定的索引到列表中?
例如,给定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]。
我有以下选择:
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))]发布于 2018-11-09 09:52:06
%的典型用例
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)是产生相同结果的结果:
lst[i:i+3] + lst[:max(0 , -1*(len(lst)-i-3))]你可以很容易地通过简单的尝试来确认这一点;)
发布于 2018-11-09 09:53:41
这可以很容易地使用np.roll实现。
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]发布于 2018-11-09 09:56:33
您可以从文档中使用循环:
使迭代器从迭代器返回元素,并保存每个元素的副本。当可迭代耗尽时,从保存的副本中返回元素。
代码:
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))输出
[4, 5, 1]
[5, 1, 2]https://stackoverflow.com/questions/53223351
复制相似问题