이 방법으로 목록을 비우는 것은 "더러운"것 같습니다.
while len(alist) > 0 : alist.pop()
그렇게하는 명확한 방법이 있습니까?
이 방법으로 목록을 비우는 것은 "더러운"것 같습니다.
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 개 요소) [:]
(시작부터 끝까지의 모든 색인)
[:]는 슬라이스 연산자입니다. 자세한 내용은 이 질문 을 참조하십시오.
alist = []
?
alist
가 비어있는 다른 목록으로 덮어 씁니다 . 다른 사람이 (로 시작하는 거기에 있었다 어떤 즉 포함 된) 그대로 남아있는 원본 목록에 대한 참조가 있다면
alist.clear()
인지 alist[:] = []
확인하는 데 도움 alist
이됩니다. alist
함수에서 돌아 왔다고 가정 해보십시오 foo()
. foo
목록을 반환 했다고 생각 했지만 실제로는을 반환했습니다 None
. 사용 alist = []
은 그 실수를 잡을 수 없습니다.
파이썬 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
.clear()
, del b[:]
와 b[:]=[]
같은 모든 실행은 ( b[:]=[]
약간 느린 것.
list = []
list
빈 목록으로 재설정 됩니다.
일반적으로 list
리스트 객체의 생성자 인 예약 된 함수 이름을 숨겨서는 안됩니다 . 예를 들어 대신 사용 lst
하거나 list_
대신 사용할 수 있습니다 .
list
. 예를 들어 전달 된 목록을 수정하는 함수가 필요한 경우 원하는 작업을 수행하지 않습니다.
상황에 따라 사용할 수있는 또 다른 간단한 코드는 다음과 같습니다.
index=len(list)-1
while index>=0:
del list[index]
index-=1
목록의 길이에서 색인을 시작하고 0에서 색인으로 이동해야합니다. 목록의 길이와 같은 색인으로 반으로 줄어 듭니다.
또한 while 행에 "보다 크거나 같은"부호가 있는지 확인하십시오. 생략하면 list [0]이 (가) 남게됩니다.