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



кажется таким "грязным" опустошение списка таким образом:



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


существует ли ясный способ сделать это?

579   7  

7 ответов:

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

del lst[:]

вот пример:

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

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

lst[:] = []

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

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

если у вас есть Python 3.3 или лучше, вы могли бы использовать clear() метод list, параллельно clear() of 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 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
lst *= 0

аналогично

lst[:] = []

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

эффективность, кажется, примерно такая же

list = []

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

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

еще один простой код можно использовать (в зависимости от вашей ситуации):

index=len(list)-1

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

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

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

Comments

    Ничего не найдено.