cómo recorrer la lista varias veces en Python

¿Puede recorrer la lista (usando el rango que tiene un paso) una y otra vez hasta que todos los elementos de la lista sean accedidos por el bucle?

Tengo las siguientes listas:

result = [] list = ['ba', 'cb', 'dc', 'ed', 'gf', 'jh'] 

quiero que el resultado sea

 result = ['dc', 'cb', 'ba', 'jh', 'gf', 'ed'] 

¿Cómo hago para que recorra la primera lista y agregue cada elemento a la lista de resultados, comenzando desde el tercer elemento y utilizando 5 como un paso, hasta que todos los elementos estén en la lista de resultados?

Suponiendo que el paso y la longitud de la lista sean coprime, puede hacer:

 result = [] list = ['ba', 'cb', 'dc', 'ed', 'gf', 'jh'] start = 2 step = 5 end = start + step*len(list) for i in range(start, end, step): result.append(list[i%len(list)]) print result 

Resultado:

 ['dc', 'cb', 'ba', 'jh', 'gf', 'ed'] 

No hay necesidad de recorrer una lista varias veces. Como una forma más pythonica, puede usar itertools.cycle e islice :

 >>> from itertools import cycle,islice >>> li= ['ba', 'cb', 'dc', 'ed', 'gf', 'jh'] >>> sl=islice(cycle(li),2,None,4) >>> [next(sl) for _ in range(len(li))] ['dc', 'ba', 'gf', 'dc', 'ba', 'gf'] 

Tenga en cuenta que en el resultado esperado, el paso es 5 no 4. Por lo tanto, si usa 5 como paso de división, obtendrá el resultado esperado:

 >>> sl=islice(cycle(li),2,None,5) >>> [next(sl) for _ in range(len(li))] ['dc', 'cb', 'ba', 'jh', 'gf', 'ed'] 

Una solución muy simple se publicó anteriormente, sin estar seguro de por qué se eliminó:

 >>> a = ['ba', 'cb', 'dc', 'ed', 'gf', 'jh'] >>> result = [a[n] for n in range(2, -4, -1)] >>> result ['dc', 'cb', 'ba', 'jh', 'gf', 'ed']