Как очистить список в Python?
Это выглядит так "грязно", опустошая список таким образом:
while len(alist) > 0 : alist.pop()
Существует ли четкий способ сделать это?
7 ответов
Это фактически удаляет содержимое из списка, но не заменяет старый ярлык новым пустым списком:
del lst[:]
Вот пример:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
Для полноты назначения среза имеет тот же эффект:
lst[:] = []
Его также можно использовать для сокращения части списка при одновременной замене части (но это выходит за рамки вопроса).
Обратите внимание, что делать lst = []
не очищает список, просто создает новый объект и привязывает его к переменной lst
, но старый список будет по-прежнему иметь те же элементы, и эффект будет очевиден, если у него будут другие привязки переменных.
Если у вас есть Python 3.3 или выше, вы можете использовать clear()
метод list
который параллелен clear()
из dict
, set
, deque
и другие типы изменяемых контейнеров:
alist.clear() # removes all items from alist (equivalent to del alist[:])
Что касается связанной страницы, то же самое может быть достигнуто с alist *= 0
,
Вы можете попробовать:
alist[:] = []
Что означает: сращивание в списке []
(0 элементов) на месте [:]
(все индексы от начала до конца)
[:] Является оператором среза. Смотрите этот вопрос для получения дополнительной информации.
Получается, что с 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
lst *= 0
имеет тот же эффект, что и
lst[:] = []
Это немного проще и, возможно, легче запомнить. Кроме этого, сказать особо нечего
Эффективность кажется примерно одинаковой
list = []
сбросит list
в пустой список.
Обратите внимание, что вы обычно не должны скрывать зарезервированные имена функций, такие как list
, который является конструктором для объекта списка - вы можете использовать lst
или же list_
вместо этого, например.
Другой простой код, который вы можете использовать (в зависимости от вашей ситуации):
index=len(list)-1
while index>=0:
del list[index]
index-=1
Вы должны начать индексирование по длине списка и перейти назад к индексу с 0, вперед, потому что это приведет к тому, что индекс будет равен длине списка, а его урежут только пополам.
Также убедитесь, что строка while имеет знак "больше или равно". Если вы пропустите его, у вас останется список [0].