Как очистить список в Python? - PullRequest
       16

Как очистить список в Python?

338 голосов
/ 09 сентября 2009

Кажется, что такое "грязное" очищение списка таким образом:

while len(alist) > 0 : alist.pop()

Существует ли четкий способ сделать это?

Ответы [ 7 ]

552 голосов
/ 09 сентября 2009

Это фактически удаляет содержимое из списка, но не заменяет старый ярлык новым пустым списком:

del lst[:]

Вот пример:

lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)

Ради полноты назначение среза имеет тот же эффект:

lst[:] = []

Он также может использоваться для сокращения части списка при одновременной замене части (но это выходит за рамки вопроса).

Обратите внимание, что выполнение lst = [] не очищает список, а просто создает новый объект и связывает его с переменной lst, но старый список будет по-прежнему иметь те же элементы, и эффект будет очевиден, если у него был другой Переменные привязки.

132 голосов
/ 06 мая 2015

Если вы используете Python 3.3 или выше, вы можете использовать clear() метод list, который параллелен clear() из dict, set, deque и другие типы изменяемых контейнеров:

alist.clear()  # removes all items from alist (equivalent to del alist[:])

Согласно связанной странице документации, то же самое может быть достигнуто с alist *= 0.

Подводя итог, можно выделить четыре эквивалентных способа очистки списка на месте (в отличие от Zen of Python !):

  1. alist.clear() # Python 3.3+
  2. del alist[:]
  3. alist[:] = []
  4. alist *= 0
58 голосов
/ 09 сентября 2009

Вы можете попробовать:

alist[:] = []

Что означает: сращивание в списке [] (0 элементов) в местоположении [:] (все индексы от начала до конца)

[:] является оператором среза. См. этот вопрос для получения дополнительной информации.

32 голосов
/ 23 ноября 2011

получается, что в python 2.5.2 del l[:] немного медленнее, чем l[:] = [] на 1.1. Usec.

$ 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
3 голосов
/ 23 марта 2018
lst *= 0

имеет тот же эффект, что и

lst[:] = []

Это немного проще и, возможно, легче запомнить. Кроме этого, не так много, чтобы сказать

Эффективность примерно одинакова

1 голос
/ 09 сентября 2009
list = []

сбросит list в пустой список.

Обратите внимание, что вы обычно не должны скрывать зарезервированные имена функций, такие как list, который является конструктором для объекта списка - вместо этого вы можете использовать lst или list_, например.

0 голосов
/ 13 августа 2014

Другой простой код, который вы можете использовать (в зависимости от вашей ситуации):

index=len(list)-1

while index>=0:
    del list[index]
    index-=1

Вы должны начать индексирование с длины списка и перейти назад к индексу с 0, вперед, потому что это приведет к тому, что индекс будет равен длине списка, а его урежут пополам.

Также убедитесь, что строка while имеет знак «больше или равно». Если вы пропустите его, у вас останется список [0].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...