이 방법으로 목록을 비우는 것은 “더러운”것 같습니다.
while len(alist) > 0 : alist.pop()
그렇게하는 명확한 방법이 있습니까?
답변
이것은 실제로 목록에서 내용을 제거하지만 이전 레이블을 새로운 빈 목록으로 대체하지 않습니다.
del lst[:]
예를 들면 다음과 같습니다.
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
완전성을 위해 슬라이스 할당은 동일한 효과를 갖습니다.
lst[:] = []
또한 부품을 동시에 교체하면서 목록의 일부를 축소하는 데 사용할 수도 있습니다 (그러나 문제의 범위를 벗어남).
그렇게 lst = []
하면리스트를 비우지 않고 새 객체를 만들어 변수에 바인딩 할 수 lst
있지만, 기존리스트에는 여전히 동일한 요소가 있으며 다른 변수 바인딩이 있으면 효과가 분명해집니다.
답변
파이썬 3.3 이상을 실행하는 경우, 당신은 사용할 수있는 clear()
방법 list
에 평행, clear()
의 dict
, set
, deque
및 기타 변경 가능한 컨테이너 유형을 :
alist.clear() # removes all items from alist (equivalent to del alist[:])
링크 된 문서 페이지에 따라을 사용하여 동일한 내용을 얻을 수도 있습니다 alist *= 0
.
요약하면, 목록을 제자리에서 지우는 동등한 방법이 4 가지 있습니다 ( Python 의 Zen과 반대로 )!
alist.clear() # Python 3.3+
del alist[:]
alist[:] = []
alist *= 0
답변
시도해 볼 수 있습니다 :
alist[:] = []
의미 : 목록에서 목록의 []
요소 (0 개 요소) [:]
(시작부터 끝까지의 모든 색인)
[:]는 슬라이스 연산자입니다. 자세한 내용은 이 질문 을 참조하십시오.
답변
파이썬 2.5.2에서는 1.1 usec del l[:]
보다 약간 느립니다 l[:] = []
.
$ 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 행에 “보다 크거나 같은”부호가 있는지 확인하십시오. 생략하면 list [0]이 (가) 남게됩니다.