Рассмотрим следующий код python:
s=[1,2,3,4,5,6,7]
result=[]
cur_idx=0
while 1:
print s,result
if(len(s))==0:
break
if cur_idx<len(s)-2:
cur_idx=cur_idx+2
else:
cur_idx= (len(s)-2+cur_idx) % len(s) -1
result.append(s[cur_idx])
del s[cur_idx]
Он делает почти то, что вы хотите:
[1, 2, 3, 4, 5, 6, 7] []
[1, 2, 4, 5, 6, 7] [3]
[1, 2, 4, 5, 7] [3, 6]
[1, 4, 5, 7] [3, 6, 2]
[1, 4, 5] [3, 6, 2, 7]
[4, 5] [3, 6, 2, 7, 1]
[4] [3, 6, 2, 7, 1, 5]
[] [3, 6, 2, 7, 1, 5, 4]
На самом деле разница в том, когда 7
удален, потому что вы считаете «виртуальный индекс». Я нашел утомительное решение, чтобы справиться с этим:
s=[1,2,3,4,5,6,7]
result=[]
cur_idx=0
while 1:
print s,result,cur_idx,len(s)
if(len(s))==1:
result.append(s[0])
s=[]
print "final result:", result
break
if cur_idx<len(s)-2:
cur_idx=cur_idx+2
else:
cur_idx= len(s)-cur_idx
if cur_idx==len(s):
cur_idx=0
result.append(s[cur_idx])
del s[cur_idx]
if cur_idx==len(s):
cur_idx=0
Это приводит к:
[1, 2, 3, 4, 5, 6, 7] [] 0 7
[1, 2, 4, 5, 6, 7] [3] 2 6
[1, 2, 4, 5, 7] [3, 6] 4 5
[1, 4, 5, 7] [3, 6, 2] 1 4
[1, 4, 5] [3, 6, 2, 7] 0 3
[1, 4] [3, 6, 2, 7, 5] 0 2
[4] [3, 6, 2, 7, 5, 1] 0 1
final result: [3, 6, 2, 7, 5, 1, 4]