in

python – ¿Accediendo al índice en bucles ‘for’?

apple touch icon@2

Usar enumerate para obtener el índice con el elemento mientras itera:

for index, item in enumerate(items):
    print(index, item)

Y tenga en cuenta que los índices de Python comienzan en cero, por lo que obtendría de 0 a 4 con lo anterior. Si desea el recuento, de 1 a 5, haga esto:

count = 0 # in case items is empty and you need it after the loop
for count, item in enumerate(items, start=1):
    print(count, item)

Lo que está pidiendo es el equivalente Pythonic de lo siguiente, que es el algoritmo que la mayoría de los programadores de lenguajes de nivel inferior usarían:

index = 0            # Python's indexing starts at zero
for item in items:   # Python's for loops are a "for each" loop 
    print(index, item)
    index += 1

O en idiomas que no tienen un bucle for-each:

index = 0
while index < len(items):
    print(index, items[index])
    index += 1

oa veces más comúnmente (pero unidiomáticamente) que se encuentra en Python:

for index in range(len(items)):
    print(index, items[index])

Python enumerate función reduce el desorden visual ocultando la contabilidad de los índices y encapsulando el iterable en otro iterable (un enumerate object) que produce una tupla de dos elementos del índice y el elemento que proporcionaría el iterable original. Eso se ve así:

for index, item in enumerate(items, start=0):   # default is zero
    print(index, item)

Este ejemplo de código es bastante bueno canónico ejemplo de la diferencia entre el código idiomático de Python y el código que no lo es. El código idiomático es Python sofisticado (pero no complicado), escrito de la forma en que fue diseñado para ser utilizado. Los diseñadores del lenguaje esperan código idiomático, lo que significa que normalmente este código no solo es más legible, sino también más eficiente.

Conseguir un recuento

Incluso si no necesita índices sobre la marcha, pero necesita un recuento de las iteraciones (a veces deseables) con las que puede comenzar 1 y el número final será tu cuenta.

count = 0 # in case items is empty
for count, item in enumerate(items, start=1):   # default is zero
    print(item)

print('there were {0} items printed'.format(count))

El recuento parece ser más lo que pretendes pedir (en contraposición al índice) cuando dijiste que querías de 1 a 5.


Desglosando: una explicación paso a paso

Para desglosar estos ejemplos, digamos que tenemos una lista de elementos sobre los que queremos iterar con un índice:

items = ['a', 'b', 'c', 'd', 'e']

Ahora pasamos este iterable para enumerar, creando un objeto enumerado:

enumerate_object = enumerate(items) # the enumerate object

Podemos sacar el primer elemento de este iterable que obtendríamos en un bucle con el next función:

iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)

Y vemos que obtenemos una tupla de 0, el primer índice, y 'a', el primer elemento:

(0, 'a')

podemos utilizar lo que se denomina «secuencia de desembalaje«para extraer los elementos de esta tupla de dos:

index, item = iteration
#   0,  'a' = (0, 'a') # essentially this.

y cuando inspeccionamos index, encontramos que se refiere al primer índice, 0, y item se refiere al primer elemento, 'a'.

>>> print(index)
0
>>> print(item)
a
  • Los índices de Python comienzan en cero
  • Para obtener estos índices de un iterable a medida que lo recorre, use la función enumerar
  • El uso de enumerate de forma idiomática (junto con el desempaquetado de tuplas) crea un código que es más legible y fácil de mantener:

Entonces haz esto:

for index, item in enumerate(items, start=0):   # Python indexes start at zero
    print(index, item)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

drupal

Tutorial de Drupal

SBt9pB7xnjNdcerRHBBhxh 1200 80

Explicación del final de la temporada 1 de The Boys: lo que significa el gran suspenso para la temporada 2