bool_list[:] = [False] * len(bool_list)
или
bool_list[:] = [False for item in bool_list]
Если у Вас только есть одна ссылка на список, следующее может быть легче:
bool_list = [False] * len(bool_list)
Это создает новый список, заполненный с False
элементы.
См. мой ответ на словарь Python, четкий для подобного примера.
мудрая Производительностью Сводка , numpy или умножение списка является явными победителями, поскольку они 10-20x быстрее, чем другие подходы.
я сделал некоторое тестирование производительности на предложенных различных вариантах. Я использовал Python 2.5.2, на Linux (Ubuntu 8.10), с 1,5 ГГц Pentium M.
Исходный:
python timeit.py -s 'bool_list = [True] * 1000' 'for x in xrange(len(bool_list)): bool_list[x] = False'
1 000 циклов, лучших из 3: 280 мкс за цикл
Основанная на части замена с пониманием списка:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = [False for element in bool_list]'
1 000 циклов, лучших из 3: 215 мкс за цикл
Основанная на части замена с пониманием генератора:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = (False for element in bool_list)'
1 000 циклов, лучших из 3: 265 мкс за цикл
Перечисляют :
python timeit.py -s 'bool_list = [True] * 1000' 'for i, v in enumerate(bool_list): bool_list[i] = False'
1 000 циклов, лучших из 3: 385 мкс за цикл
Numpy:
python timeit.py -s 'import numpy' -s 'bool_list = numpy.zeros((1000,), dtype=numpy.bool)' 'bool_list[:] = False'
10 000 циклов, лучших из 3: 15,9 мкс за цикл
Основанная на части замена с умножением списка:
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list[:] = [False] * len(bool_list)'
10 000 циклов, лучших из 3: 23,3 мкс за цикл
Ссылочная замена с умножением списка
python timeit.py -s 'bool_list = [True] * 1000' 'bool_list = [False] * len(bool_list)'
10 000 циклов, лучших из 3: 11,3 мкс за цикл
Вот другая версия:
bool_list = [False for item in bool_list]
Если Вы готовы использовать массивы numpy, на самом деле действительно легко сделать вещи как этот массив использования части.
import numpy
bool_list = numpy.zeros((100,), dtype=numpy.bool)
# do something interesting with bool_list as if it were a normal list
bool_list[:] = False
# all elements have been reset to False now
Для типов значения, таких как интервал, bool и строка, Ваш 2-й пример почти так же симпатичен как его попытка добраться. Ваш первый пример будет работать над любыми ссылочными типами как классы, dicts, или другими списками.
Я думаю
bool_list = [False for element in bool_list]
, как pythonic, как это добирается. Используя списки как это должно обычно быть быстрее затем для цикла в Python также.
Я не использовал бы диапазон и len. Это намного более чисто для использования, перечисляют ()
for i, v in enumerate(bool_list): #i, v = index and value
bool_list[i] = False
, Это оставляют с неиспользуемой переменной в этом случае, но это все еще выглядит более чистым, по-моему. Нет никакого значимого изменения в производительности также.