while for español ejemplos contador bucle anidado loops for-loop python

loops - español - Contador de bucle Python en un bucle for



for i in range python español (4)

A veces hago esto:

def draw_menu(options, selected_index): for i in range(len(options)): if i == selected_index: print " [*] %s" % options[i] else: print " [ ] %s" % options[i]

Aunque tiendo a evitar esto si significa que voy a decir options[i] más de un par de veces.

En mi código de ejemplo a continuación, ¿realmente se requiere el contador = 0, o hay una manera mejor, más Python, de obtener acceso a un contador de bucles? Vi algunas PEP relacionadas con los contadores de bucles, pero fueron diferidas o rechazadas ( PEP 212 y PEP 281 ).

Este es un ejemplo simplificado de mi problema. En mi aplicación real, esto se hace con gráficos y todo el menú debe ser repintado en cada cuadro. Pero esto lo demuestra en una forma sencilla de texto que es fácil de reproducir.

Quizás también debería agregar que estoy usando Python 2.5, aunque todavía estoy interesado si hay una forma específica para 2.6 o superior.

# Draw all the options, but highlight the selected index def draw_menu(options, selected_index): counter = 0 for option in options: if counter == selected_index: print " [*] %s" % option else: print " [ ] %s" % option counter += 1 options = [''Option 0'', ''Option 1'', ''Option 2'', ''Option 3''] draw_menu(option, 2) # Draw menu with "Option2" selected

Cuando se ejecuta, produce:

[ ] Option 0 [ ] Option 1 [*] Option 2 [ ] Option 3


También podrías hacer:

for option in options: if option == options[selected_index]: #print else: #print

Aunque te encuentras con problemas si hay opciones duplicadas.


enumerate es lo que estás buscando.

También podría estar interesado en unpacking :

# The pattern x, y, z = [1, 2, 3] # also works in loops: l = [(28, ''M''), (4, ''a''), (1990, ''r'')] for x, y in l: print(x) # prints the numbers 28, 4, 1990 # and also for index, (x, y) in enumerate(l): print(x) # prints the numbers 28, 4, 1990

Además, hay itertools.count() para que puedas hacer algo como

import itertools for index, el in zip(itertools.count(), [28, 4, 1990]): print(el) # prints the numbers 28, 4, 1990


Use enumerate() como sigue:

def draw_menu(options, selected_index): for counter, option in enumerate(options): if counter == selected_index: print " [*] %s" % option else: print " [ ] %s" % option options = [''Option 0'', ''Option 1'', ''Option 2'', ''Option 3''] draw_menu(options, 2)

Nota : Opcionalmente puede poner paréntesis alrededor del counter, option , como (counter, option) , si lo desea, pero son extraños y normalmente no están incluidos.