Измените элементы списка

15
задан codeforester 4 March 2019 в 23:49
поделиться

8 ответов

bool_list[:] = [False] * len(bool_list)

или

bool_list[:] = [False for item in bool_list]
11
ответ дан 1 December 2019 в 00:08
поделиться

Если у Вас только есть одна ссылка на список, следующее может быть легче:

bool_list = [False] * len(bool_list)

Это создает новый список, заполненный с False элементы.

См. мой ответ на словарь Python, четкий для подобного примера.

13
ответ дан 1 December 2019 в 00:08
поделиться

мудрая Производительностью Сводка , 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 мкс за цикл

12
ответ дан 1 December 2019 в 00:08
поделиться

Вот другая версия:

bool_list = [False for item in bool_list]
13
ответ дан 1 December 2019 в 00:08
поделиться

Если Вы готовы использовать массивы 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
4
ответ дан 1 December 2019 в 00:08
поделиться

Для типов значения, таких как интервал, bool и строка, Ваш 2-й пример почти так же симпатичен как его попытка добраться. Ваш первый пример будет работать над любыми ссылочными типами как классы, dicts, или другими списками.

0
ответ дан 1 December 2019 в 00:08
поделиться

Я думаю

bool_list = [False for element in bool_list]

, как pythonic, как это добирается. Используя списки как это должно обычно быть быстрее затем для цикла в Python также.

0
ответ дан 1 December 2019 в 00:08
поделиться

Я не использовал бы диапазон и len. Это намного более чисто для использования, перечисляют ()

for i, v in enumerate(bool_list): #i, v = index and value
    bool_list[i] = False

, Это оставляют с неиспользуемой переменной в этом случае, но это все еще выглядит более чистым, по-моему. Нет никакого значимого изменения в производительности также.

3
ответ дан 1 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: