Python中for循环的计数器

160 投票
4 回答
348551 浏览
提问于 2025-04-15 13:10

在我下面的示例代码中,计数器设置为0真的有必要吗?或者有没有更好、更符合Python风格的方法来获取循环计数器?我看到了一些关于循环计数器的PEP(Python增强提案),但它们要么被推迟了,要么被拒绝了(PEP 212PEP 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),但这不是必须的,通常也不需要加。

撰写回答