파이썬 리스트 요소 제거(remove)에 대해서
'점프 투 파이썬' 이라는 책에
>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)
[1, 2, 1, 2, 3]
이라고 돼있는데 a[:2]같은 것을 사용해서 0번째부터 2번째까지 한방에 없애는 명령어는 없나요 ?
1.점프 투 파이썬' 이라는 책에
>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)
[1, 2, 1, 2, 3]
이라고 돼있는데 a[:2]같은 것을 사용해서 0번째부터 2번째까지 한방에 없애는 명령어는 없나요 ?
A: 지우는 것보다 그냥 슬라이스하는것이 좋겠습니다.
그냥 a = a[3:] 하면 되겠습니다.
제거하는것이 더 오래걸려요.
흔히 쓰이는 세 가지 방법을 소개시켜드리겠습니다.
1. a[:2] 같은 것을 사용해서 0번째부터 2번째까지 한방에 없애는 명령어
a_filtered = a[2:] # 2번째 부터 마지막까지 걸러줍니다.a[:2]는 "index가 2되기 직전까지 추출하라"이고, a[2:]는 "index가 2될 때부터 끝까지 추출하라"입니다. a[2:4]은 "index가 2가 될 때부터 추출하고, 4 직전까지 추출하라"이기 때문에 index가 2와 3인 부분만 추출됩니다.
한마디로, "x:y"는 "x부터 y직전까지의 요소들을 추출해라"입니다.
2. for loop 혹은 while loop과 remove 사용
a_filtered=[] # 빈 배열 선언 for element in a: # element 마다 loop돌리기 if element is not 2: # 만약 element가 2가 아니라면, a_filtered.push(element) # 새 배열에 추가해주기.3. list comprehension 사용
[value for value in a if value != 2]del 키워드를 통한 삭제
list의 remove메소드에 의한 삭제
list.remove(찾을아이템)
찾을 아이템이 없으면 ValueError 발생
del키워드와 리스트의 index메소드와 혼합하여 사용하면 remove효과가 남
위 링크 자료를 참고하시면 되겠습니다.
인덱스 0부터 2까지 일괄적으로 삭제하려면 iterate 작업이 추가적으로 붙어야될것 같네요.
del 리스트명[인덱스]
del 키워드를 통해 리스트명에 인덱스를 넣어주면 해당 인덱스에 위치한 요소가 지워집니다.
>>> a = [1, 2, 3, 1, 2, 3] >>> del a[1] 출력 [1, 3, 1, 2, 3]del을 통한 삭제는 슬라이싱을 통해 여러개를 한번에 삭제도 할 수 있습니다. slice 방식으로 1:3은 1, 2번 인덱스를 뜻합니다.
>>> a = [1, 2, 3, 1, 2, 3] >>> del a[1:3] 출력 [1, 1, 2, 3]네, 그런 명령어는 없습니다. 그런 명령어를 구현할려면 추가 함수를 구현해주셔야 됩니다.
그런데 왜 a[:] 이것을 사용 안하고 제거할려고 하시는건가요?
a = a[2:-1]이렇게 구현해주시게 되면은 0부터 2개 slice한 것과 같이 remove한 것과 똑같은 역할을 수행합니다.
한번 참고해 보시길 바랍니다.
리스트에서 원소를 삭제하는 함수는 del 함수와 remove 함수가 있지만 이 함수들은 원소를 하나씩 밖에 삭제하지 못합니다. del 함수나 remove 함수를 사용하여 여러 개의 원소를 삭제하기 위해서는 해당 함수를 여러 번 사용해야 하는 방법 밖에 없습니다.
다만, a = a[3:] 와 같은 명령을 사용해서 3번째부터 마지막 원소까지 들어있는 리스트를 다시 변수 a에 저장하면 0번째부터 2번째까지의 원소들이 삭제된 리스트를 만들 수 있습니다.