[python] 목록을 비우는 방법?

이 방법으로 목록을 비우는 것은 “더러운”것 같습니다.

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 가지 있습니다 ( PythonZen과 반대로 )!

  1. alist.clear() # Python 3.3+
  2. del alist[:]
  3. alist[:] = []
  4. 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]이 (가) 남게됩니다.