Такое "грязное" опустошение списка выглядит так:
while len(alist) > 0 : alist.pop()
Существует ли для этого четкий способ?
Такое "грязное" опустошение списка выглядит так:
while len(alist) > 0 : alist.pop()
Существует ли для этого четкий способ?
Это фактически удаляет содержимое из списка, но не заменяет старую метку новым пустым списком:
del lst[:]
Вот пример:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
Для полноты картины назначение срезов имеет тот же эффект:
lst[:] = []
Его также можно использовать для уменьшения части списка при одновременной замене части (но это выходит за рамки вопроса).
Обратите внимание, что выполнение lst = []
не очищает список, а просто создает новый объект и привязывает его к переменной lst
, но старый список по-прежнему будет содержать те же элементы, и эффект будет очевиден, если у него были другие привязки переменных.
i=[]
, тогда все новые собранные данные будут проиндексированы в массиве на одно число выше последнего, начиная с 0. Но когда вы впервые сделаете свой массив, он пуст. Вы, конечно, можете распечатать его как print i
, но на выходе будет только []
. Кроме того, попробуйте конкретизировать: print i[0]
или print i[3]
, и вы получите исключение. Однако, пока данные хранятся в массиве, del i[x]
можно использовать для очистки любой одной или нескольких из этих индексированных позиций.
- person Musixauce3000; 05.04.2016
Если вы используете Python 3.3 или выше, вы можете использовать _1 _ метод list
, который параллелен clear()
dict
, set
, deque
и другим изменяемым типам контейнеров:
alist.clear() # removes all items from alist (equivalent to del alist[:])
Как указано на странице документации по ссылке, то же самое можно сделать и с alist *= 0
.
Подводя итог, можно сказать, что существует четыре эквивалентных способа очистки списка на месте (в отличие от Дзен Python!):
alist.clear() # Python 3.3+
del alist[:]
alist[:] = []
alist *= 0
Вы можете попробовать:
alist[:] = []
Это означает: соединить список []
(0 элементов) в месте [:]
(все индексы от начала до конца)
[:] - это оператор среза. Дополнительную информацию см. В этом вопросе.
alist = []
?
- person mitenka; 09.02.2017
alist
другим списком, который оказывается пустым. Если у кого-то еще была ссылка на исходный список, он остается как есть (т.е. он содержит все, что было в нем с самого начала)
- person Adam Batkin; 13.02.2017
alist.clear()
или alist[:] = []
помогают проверить, что alist
действительно является списком. Допустим, вы получили alist
, возвращенное функцией foo()
. Вы думали, что foo
вернул список, но на самом деле он вернул None
. Использование alist = []
не может обнаружить эту ошибку.
- person aafulei; 06.09.2019
оказывается, что с python 2.5.2 del l[:]
немного медленнее, чем l[:] = []
на 1,1 мкс.
$ python -mtimeit "l=list(range(1000))" "b=l[:];del b[:]"
10000 loops, best of 3: 29.8 usec per loop
$ python -mtimeit "l=list(range(1000))" "b=l[:];b[:] = []"
10000 loops, best of 3: 28.7 usec per loop
$ python -V
Python 2.5.2
.clear()
, del b[:]
и b[:]=[]
работают одинаково (b[:]=[]
немного медленнее.
- person Conchylicultor; 13.03.2017
lst *= 0
имеет тот же эффект, что и
lst[:] = []
Это немного проще и, возможно, легче запомнить. Кроме этого нечего сказать
КПД вроде примерно такой же
0
, будет иметь такой же эффект. Это довольно изящный трюк, мне немного грустно, что он не получил особого внимания ...
- person Peter Varo; 24.05.2018
list = []
сбросит list
в пустой список.
Обратите внимание, что обычно вы не должны скрывать зарезервированные имена функций, такие как list
, который является конструктором для объекта списка - вместо этого вы можете использовать, например, lst
или list_
.
list
. Если вы ожидали, что функция изменит переданный список (например), это не сделает того, что вы хотите.
- person Adam Batkin; 09.09.2009
list.clear()
.
- person akinuri; 15.01.2019
Еще один простой код, который вы можете использовать (в зависимости от вашей ситуации):
index=len(list)-1
while index>=0:
del list[index]
index-=1
Вы должны начать индекс по длине списка и идти назад по сравнению с индексом с 0, вперед, потому что в результате вы получите индекс, равный длине списка, при этом он будет разрезан только пополам.
Также убедитесь, что в строке while есть знак «больше или равно». Если вы его не укажете, у вас останется список [0].