2016-06-28 17 views
1

ベクトルのiインデックスを均一にt回抽出したいと思います。私はベクトルx = [1,2,3,4,5,6,7]i = 3t = 5を持っている場合たとえば、各時間での私の指標でなければなりません:開始点がstopより大きいPythonの範囲

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] 

range()でPythonのでそれを行うことは可能でしょうか?

+0

itertoolsモジュールは便利です。例:http://stackoverflow.com/questions/2167868/getting-next-element-while-cycling-through-a-list – Mel

答えて

3

あなたはitertools.cycleitertools.isliceを使用することができます。反復可能でcycleオブジェクトを作成し、sliceオブジェクトあなたのウィンドウサイズ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]] 
1

はこれを試してみてください:

x = [1,2,3,4,5,6,7] 
xc = len(x) 
i = 3 

for t in range(5): 
    y = [x[(i*t + j) % xc] for j in range(i)] 
    print(y) 

これが生成します。

[1, 2, 3] 
[4, 5, 6] 
[7, 1, 2] 
[3, 4, 5] 
[6, 7, 1] 
関連する問題