сбросьте список python, сделав все элементы равными 0

#python #list #reset

Вопрос:

У меня есть список python, не зная, сколько целых элементов он содержит.
по какой-то причине я хочу сбросить все элементы до 0. как показано ниже

 [0, 0, 0, 0......]
 

Как мне это сделать?

Комментарии:

1. lst = [1,2,3] lst= [0 for x in lst]

2. В чем, собственно, проблема? Вы вообще что — нибудь пробовали?

3. @balderman, который на самом деле не устанавливает элементы списка в 0.

4. @balderman Это вообще не влияет на объект списка. И это создает ложный второй список.

5. @juanpa.arrivillaga Я согласен. Но мне «кажется», что не важно, создается ли новый список.

Ответ №1:

Вы можете использовать назначение среза:

 lst = [5, 4, 3, 2, 1]

lst[:] = [0 for _ in lst]
 

Назначение среза гарантирует, что исходный список действительно мутирован. В противном случае ( lst = ... ) вы просто повторно привязываете (возможно, только локальную) переменную.

Комментарии:

1. Где я вижу использование пространства в этом инструменте?

2. Я утверждаю, что генератор использует O(1) пространство, а не O(N) , скажем, как другой объект списка lst[:] = [0 for _ in lst] .

3. А, понятно. Этот случай на самом деле очень интересен.

4. Также имеет смысл для псевдо-назначения (это мутация, я знаю) полностью оценить правую сторону перед «назначением». Но верно, для ленивого итератора, которому должен потребоваться какой-то способ хранения элементов.

5. На самом деле назначение среза всегда создает список из итерируемого, так что на самом деле это не постоянное пространство. Если вам нужно постоянное пространство, используйте цикл

Ответ №2:

Если ваш список называется data

 >>> data = [1,2,3,4]
 

вы можете либо создать новый список всех 0

 >>> data = [0]*len(data)
>>> data
[0, 0, 0, 0]
 

или используйте понимание списка

 >>> data = [0 for _ in data]
>>> data
[0, 0, 0, 0]
 

Комментарии:

1. Оба они создают новый список, чтобы быть ясным

2. @juanpa.arrivillaga Правильно, хотя я не понял из операции, что это противоречит их требованиям?

3. ОП неясен, но в вашем ответе вы указываете, что «вы можете либо создать новый список всех 0, либо использовать понимание списка», что может означать, что понимание списка не создает новый список