2016-07-10 3 views
0

По какой-то причине этот код:Если заявление действующего как в то время как заявление Python3

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. Это связано с тем, что код находится в функции, или это что-то еще?

Edit: При печати списка, оно выводит:

[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]. Почему это?

+3

Может вы проверяете, что jan_1_index указывает не на тот же объект, что и assign_dates? – DAXaholic

+0

@DAXaholic Они - два отдельных массива. – Kronyklos

+0

Как вы определили, что он добавляет «бесконечно»? Если программа блокируется, как вы узнаете, что конкретный список становится бесконечно большим? Нет, если утверждения не превращаются внезапно в бесконечные циклы, потому что они находятся внутри функций, которые были бы непригодными ... – TessellatingHeckler

ответ

2

Две проблемы с кодом - list.index всегда будут возвращать индекс в начале матча - так эффективно, вы получите повторяющиеся индексы. Другой вопрос (который трудно отличить от кода), что, вероятно, что-то мутирует appointment_dates ...

Pythonic способ сделать это с помощью использования списка-Comp, например:

jan_1_index = [ 
    idx for idx, item in enumerate(appointment_dates) 
    if item[:2] == '01' and item[3:5] == '01' # and not adding 
] 
Смежные вопросы