Iterar sobre cada elemento n en cadena en bucle – python

¿Cómo se puede iterar sobre cada segundo elemento en la cadena?

Una forma de hacer esto sería (si quiero iterar sobre el elemento nth):

sample = "This is a string" n = 3 # I want to iterate over every third element i = 1 for x in sample: if i % n == 0: # do something with x else: # do something else with x i += 1 

¿Hay alguna forma “pythonica” de hacer esto? (Estoy bastante seguro de que mi método no es bueno)

Si desea hacer algo en cada n-ésimo paso y algo más para otros casos, puede usar la enumerate para obtener el índice y el módulo:

 sample = "This is a string" n = 3 # I want to iterate over every third element for i,x in enumerate(sample): if i % n == 0: print("do something with x "+x) else: print("do something else with x "+x) 

Tenga en cuenta que no comienza en 1 sino en 0. Agregue un desplazamiento a i si desea algo más.

Para iterar solo en cada elemento nth, la mejor manera es usar itertools.islice para evitar crear una cadena “dura” solo para iterar en ella:

 import itertools for s in itertools.islice(sample,None,None,n): print(s) 

resultado:

 T s s r g 

puede usar el step como ejemplo de sample[start:stop:step]

Si quieres iterar sobre cada segundo elemento que puedes hacer:

 sample = "This is a string" for x in sample[::2]: print(x) 

salida

 T i s a s r n 

Trate de usar la slice

 sample = "This is a string" for i in sample[slice(None,None,2)]: print(i) 

Salida:

 T i s a s r n