if语句就像while语句python3一样

时间:2016-07-10 03:54:49

标签: python python-3.x

出于某种原因,这段代码:

    def display_jan_appointments():  
        for item in appointment_dates:  
            if item[0:2] == "01" and item[3:5] == "01" and not adding:
                pygame.draw.ellipse(screen, BLUE, [915, 275, 20, 20])
                jan_1_index.append(appointment_dates.index(item))
                jan1 = True
                global jan1

无限地将项目的索引添加到jan_1_index列表中。我不知道为什么,因为if语句应该只迭代一次,因为它不是while语句。这是代码在函数中,还是其他东西?

编辑:当我打印出列表时,它会输出:

    [0]
    [0, 0]
    [0, 0, 0]
    [0, 0, 0, 0]
    [0, 0, 0, 0, 0]

等等。

双重编辑:我制作了一小段代码,包含了所有必要的内容。

appointment_dates = ["01/01", "01/01"]
jan_1_index = []
adding = False
for item in appointment_dates:
    if item[0:2] == "01" and item[3:5] == "01" and not adding:
        jan_1_index.append(appointment_dates.index(item))               
        print(jan_1_index)

然而,这段代码输出的列表就像它应该的那样,只是[0,0]。这是为什么?

1 个答案:

答案 0 :(得分:2)

代码的两个问题 - list.index将始终返回第一个匹配的索引 - 所以有效地,您将获得重复的索引。另一个问题(很难从你的代码中说出来)可能是某些东西在变异appointment_dates ......

Pythonic的方法是使用list-comp,例如:

jan_1_index = [
    idx for idx, item in enumerate(appointment_dates) 
    if item[:2] == '01' and item[3:5] == '01' # and not adding
]