2012-05-20 3 views
0

Есть ли способ сбросить приведенный ниже список обратно ко всем 'False' У меня есть программа, которая использует булевский список, например.boolean list reset

bat=[False,False,False,False,False,False,False,False,False,False,False] 

Когда основной цикл делает это второй итерации для второй команды он по-прежнему несет в себе «True» значения из первой команды. Мне нужно очистить его, чтобы вторая команда могла записывать правильные баллы.

Любая помощь будет очень признательна. Cheers

+0

Что случилось с 'для г в диапазоне (LEN (летучая мышь)): летучая мышь [ i] = False'? –

+0

@FerdinandBeyer: что требуется слишком много набора текста? :) –

+0

@larsmans: Да, но это плохое оправдание на мой взгляд :) –

ответ

4

Почему бы просто не переустановить переменную перед каждой итерацией? Т.е.,

for team in teams: 
    bat = [False] * 11 
    # do whatever 

Если вам необходимо сбросить список на месте, это

bat[:] = [False] * 11 

или

bat[:] = [False] * len(bat) 
+0

Не могли бы вы объяснить, почему использовать 'bat [:] =' вместо 'bat =' здесь? Благодаря! – mVChr

+1

@mVChr: ​​'bat [:]' изменяет список на месте. Если у вас есть другие ссылки на один и тот же список, они будут изменены вместе с 'bat'. Попробуйте напечатать 'a' и' b' после 'a = [0]; B = A; а [:] = [] '. Теперь попробуйте сделать то же самое без '[:]'. –

+0

Понял, спасибо @larsmans за новый трюк в волшебном боксе! – mVChr

1

Простой список понимания должен сделать трюк:

bat = [False for _ in bat] 

или умножить на len:

bat = [False] * len(bat) 

EDIT: Вы должны использовать bat[:] = для этих заданий (см комментарии к ответу larsmans' для почему)

+1

Почему вы должны использовать * bat [:] '? Кажется, что у ОП есть только одна ссылка 'bat', которая должна быть сброшена перед каждой итерацией, поэтому она справедлива только для текущей итерации. Поскольку вы уже создали временный список, изменение оригинала на месте - это просто (крошечный) перебор. –

+0

Спасибо, ребята, работая в моем коде прямо сейчас. – user1291271