Python loop counter in a for loop
--------------------------------------------------
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Island
--
Chapters
00:00 Python Loop Counter In A For Loop
00:59 Accepted Answer Score 269
01:24 Answer 2 Score 4
01:38 Answer 3 Score 7
01:55 Answer 4 Score 3
02:18 Thank you
--
Full question
https://stackoverflow.com/questions/1185...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#loops #forloop #python
#avk47
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Island
--
Chapters
00:00 Python Loop Counter In A For Loop
00:59 Accepted Answer Score 269
01:24 Answer 2 Score 4
01:38 Answer 3 Score 7
01:55 Answer 4 Score 3
02:18 Thank you
--
Full question
https://stackoverflow.com/questions/1185...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#loops #forloop #python
#avk47
ACCEPTED ANSWER
Score 269
Use enumerate() like so:
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)
Note: You can optionally put parenthesis around counter, option, like (counter, option), if you want, but they're extraneous and not normally included.
ANSWER 2
Score 7
I'll sometimes do this:
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]
Though I tend to avoid this if it means I'll be saying options[i] more than a couple of times.
ANSWER 3
Score 4
You could also do:
for option in options:
if option == options[selected_index]:
#print
else:
#print
Although you'd run into issues if there are duplicate options.
ANSWER 4
Score 3
enumerate is what you are looking for.
You might also be interested in 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
Also, there is itertools.count() so you could do something like
import itertools
for index, el in zip(itertools.count(), [28, 4, 1990]):
print(el) # prints the numbers 28, 4, 1990