Резюме
С точки зрения производительности, умопомрачительное умножение или умножение списка являются явными победителями, поскольку они в 10-20 раз быстрее, чем другие подходы.
Я провел тестирование производительности на различных предложенных опциях. Я использовал Python 2.5.2 в Linux (Ubuntu 8.10) с Pentium M 1,5 ГГц *
Оригинал:
python timeit.py -s 'bool_list = [True] * 1000' 'for x in xrange(len(bool_list)): bool_list[x] = False'
1000 петель, лучшее из 3: 280 мксек на петлю
Замена на основе среза с пониманием списка:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = [False for element in bool_list]'
1000 циклов, лучшее из 3: 215 циклов на цикл
Замена на основе среза с пониманием генератора:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = (False for element in bool_list)'
1000 циклов, лучшее из 3: 265 циклов на цикл
Перечислите
python timeit.py -s 'bool_list = [True] * 1000' 'for i, v in enumerate(bool_list): bool_list[i] = False'
1000 циклов, лучшее из 3: 385 циклов на цикл
Numpy
python timeit.py -s 'import numpy' -s 'bool_list = numpy.zeros((1000,), dtype=numpy.bool)' 'bool_list[:] = False'
10000 петель, лучшее из 3: 15,9 мксек на петлю
Замена на основе срезов с умножением списка:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = [False] * len(bool_list)'
10000 петель, лучшее из 3: 23,3 мксек на петлю
Замена ссылки с умножением списка
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list = [False] * len(bool_list)'
10000 петель, лучшее из 3: 11,3 мксек на петлю