for循环中的Python循环计数器

2024-05-21 08:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的示例代码中,counter=0是否真的是必需的,或者是否有更好、更多的Python方法来访问循环计数器?我看到一些与循环计数器相关的pep,但它们要么被延迟,要么被拒绝(PEP 212PEP 281)。

这是我问题的一个简单例子。在我的实际应用程序中,这是用图形完成的,整个菜单必须重新绘制每一帧。但这是以一种简单的文本方式演示的,很容易再现。

也许我还应该补充一下,我正在使用Python2.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

Tags: the方法示例indexcounter计数器pepoptions
3条回答

像这样使用^{}

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),但它们是无关的,通常不包括在内。

你也可以:

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

尽管如果有重复的选项,您会遇到问题。

我有时会这样做:

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]几次以上的话,我会尽量避免。

相关问题 更多 >