Python中for循环的计数器
在我下面的示例代码中,计数器设置为0真的有必要吗?或者有没有更好、更符合Python风格的方法来获取循环计数器?我看到了一些关于循环计数器的PEP(Python增强提案),但它们要么被推迟了,要么被拒绝了(PEP 212 和 PEP 281)。
这是我问题的一个简化示例。在我的实际应用中,这涉及到图形处理,每一帧都需要重新绘制整个菜单。但这个示例用简单的文本方式展示,容易复现。
也许我还应该补充一下,我使用的是Python 2.5,尽管我仍然对2.6或更高版本是否有特定的方法感兴趣。
# 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
运行时,它的输出是:
[ ] Option 0
[ ] Option 1
[*] Option 2
[ ] Option 3
4 个回答
4
你也可以这样做:
for option in options:
if option == options[selected_index]:
#print
else:
#print
不过,如果有重复的选项,你可能会遇到一些问题。
7
我有时候会这样做:
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]
不过如果我需要多次使用 options[i]
,我就会尽量避免这样做。
269
使用 enumerate()
方法,像这样:
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)
注意:你可以选择在 counter, option
周围加上括号,比如 (counter, option)
,但这不是必须的,通常也不需要加。