我想提取向量的 i
索引 t
次。例如,如果我有一个向量 x = [1,2,3,4,5,6,7]
,i = 3
和 t = 5
,我每次的索引必须是:
t = 1; [1,2,3]
t = 2; [4,5,6]
t = 3; [7,1,2]
t = 4; [3,4,5]
t = 5; [6,7,1]
是否可以在 Python 中使用 range()
来实现?
最佳答案
您可以使用 itertools.islice
在 itertools.cycle
.从 iterable 创建一个 cycle
对象,然后使用您的窗口大小 i
对该对象进行切片
:
from itertools import cycle
from itertools import islice
l = [1,2,3,4,5,6,7]
t = 5; i = 3
c = cycle(l)
r = [list(islice(c, i)) for _ in range(t)] # range appears here
# [[1, 2, 3], [4, 5, 6], [7, 1, 2], [3, 4, 5], [6, 7, 1]]
您可以将此应用于 i
的不同非负值,甚至当 i
大于您的列表长度时:
i = 10
r = [list(islice(c, i)) for _ in range(t)]
print(r)
# [[1, 2, 3, 4, 5, 6, 7, 1, 2, 3], [4, 5, 6, 7, 1, 2, 3, 4, 5, 6], [7, 1, 2, 3, 4, 5, 6, 7, 1, 2], [3, 4, 5, 6, 7, 1, 2, 3, 4, 5], [6, 7, 1, 2, 3, 4, 5, 6, 7, 1]]
关于开始大于停止的 Python 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075609/