meaning loop for español python enumerate

loop - python enumeration



¿Qué significa enumerar? (5)

Como han mencionado otros usuarios, enumerate es un generador que agrega un índice incremental junto a cada elemento de un iterable.

Entonces, si tiene una lista diga l = ["test_1", "test_2", "test_3"] , la list(enumerate(l)) le dará algo como esto: [(0, ''test_1''), (1, ''test_2''), (2, ''test_3'')] .

Ahora, cuando esto es útil? Un posible caso de uso es cuando desea iterar sobre elementos y desea omitir un elemento específico que solo conoce su índice en la lista pero no su valor (porque su valor no se conoce en ese momento).

for index, value in enumerate(joint_values): if index == 3: continue # Do something with the other `value`

Por lo tanto, su código se lee mejor porque también podría hacer un ciclo regular de bucle con range pero luego para acceder a los elementos que necesita para indexarlos (es decir, joint_values[i] ).

Aunque otro usuario mencionó una implementación de enumerate usando zip , creo que una forma más pura (pero un poco más compleja) sin usar itertools es la siguiente:

def enumerate(l, start=0): return zip(range(start, len(l) + start), l)

Ejemplo:

l = ["test_1", "test_2", "test_3"] enumerate(l) enumerate(l, 10)

Salida:

[(0, ''test_1''), (1, ''test_2''), (2, ''test_3'')]

[(10, ''test_1''), (11, ''test_2''), (12, ''test_3'')]

Estoy usando tkinter en Python y encontré el siguiente código:

for row_number, row in enumerate(cursor):

Me preguntaba si alguien podría explicar qué significa enumerar en este contexto.


Es una función de generador integrada, consulte docs.python.org/2/library/functions.html#enumerate .

En resumen, proporciona los elementos de un iterador, así como un número de índice:

for item in enumerate(["a", "b", "c"]): print item

huellas dactilares

(0, "a") (1, "b") (2, "c")

Es útil si desea recorrer un interator y también tener un contador de índice disponible. Si desea que el contador comience desde algún otro valor (generalmente 1), puede asignarlo como segundo argumento para enumerate .


Estoy leyendo un libro ( ''Effective Python'' ) de Brett Slatkin y muestra otra forma de iterar sobre una lista y también conocer el índice del elemento actual en la lista. PERO sugiere no usarlo y usar enumerate lugar. Sé que usted preguntó qué significa enumerar, pero cuando entendí lo siguiente, también entendí cómo enumerate hace que la iteración en una lista a la vez que se conozca el índice del elemento actual más fácil (y más legible).

list_of_letters = [''a'', ''b'', ''c''] for i in range(len(list_of_letters)): letter = list_of_letters[i] print (i, letter)

La salida es:

0 a 1 b 2 c

También solía hacer algo, incluso más tonto antes de leer sobre la función de enumerate .

i = 0 for n in list_of_letters: print (i, n) i = i +1

Produce la misma salida.

Pero con enumerate solo tengo que escribir:

list_of_letters = [''a'', ''b'', ''c''] for i, letter in enumerate(list_of_letters): print (i, letter)


La función docs.python.org/2/library/functions.html#enumerate agrega un contador a un iterable.

Entonces, para cada elemento en el cursor , se produce una tupla con (counter, element) ; el bucle for une a row_number y row , respectivamente.

Manifestación:

>>> elements = (''foo'', ''bar'', ''baz'') >>> for elem in elements: ... print elem ... foo bar baz >>> for count, elem in enumerate(elements): ... print count, elem ... 0 foo 1 bar 2 baz

De forma predeterminada, enumerate() comienza a contar en 0 pero si le asigna un segundo argumento entero, comenzará a partir de ese número:

>>> for count, elem in enumerate(elements, 42): ... print count, elem ... 42 foo 43 bar 44 baz

Si tuvieras que volver a implementar enumerate() en Python, aquí hay dos formas de lograrlo; uno usando itertools.count() para hacer el conteo, el otro contando manualmente en una función de generador :

from itertools import count def enumerate(it, start=0): # return an iterator that adds a counter to each element of it return zip(count(start), it)

y

def enumerate(it, start=0): count = start for elem in it: yield (count, elem) count += 1

La implementación real en C es más cercana a la última, con optimizaciones para reutilizar un solo objeto de tupla para el caso común for i, ... desempaquetando y utilizando un valor entero de C estándar para el contador hasta que el contador se vuelve demasiado grande para evitar el uso Objeto entero de Python (que es ilimitado).


La función de enumerar funciona de la siguiente manera:

doc = """I like movie. But I don''t like the cast. The story is very nice""" doc1 = doc.split(''.'') for i in enumerate(doc1): print(i)

La salida es

(0, ''I like movie'') (1, " But I don''t like the cast") (2, '' The story is very nice'')