7 ответов:
это фактически удаляет содержимое из списка, но не заменяет старую метку новым пустым списком:
del lst[:]вот пример:
lst1 = [1, 2, 3] lst2 = lst1 del lst1[:] print(lst2)для полноты, назначение среза имеет тот же эффект:
lst[:] = []Он также может быть использован для сокращения части списка при одновременной замене части (но это выходит за рамки вопроса).
обратите внимание:
lst = []не пустой список, просто создает новый объект и связывает его с переменнойlst, но старый список все равно будет иметь те же элементы, и эффект будет очевиден, если у него были другие привязки переменных.
если у вас есть Python 3.3 или лучше, вы могли бы использовать
clear()методlist, параллельноclear()ofdict,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