10871번 : Python(remove() 이용 시 주의할 점)
https://www.acmicpc.net/problem/10871
간단한 문제이다.
그러나 이 문제에서 평소 자주 쓰지만 맨날 구글링해서 가져오는 기능을 확실히 내 것으로 만들기 위해 포스팅한다.
n,x= map(int,input().split())
list1 = list(map(int,input().split()))
for i in list1[:]:
if i >= x:
list1.remove(i)
print(*list1)
1. 리스트에서 요소 제거
리스트에서 요소를 제거하는 방법에서는 크게 2가지가 있다.
리스트 요소를 직접 참조하여 제거하는 것과 리스트 인덱스를 이용해서 제거하는 것이 그것이다.
1-1. 리스트 요소를 직접 참조하여 제거
리스트 요소를 직접 참조하여 제거하는 함수는 'del'이다.
ex) del 리스트_이름[참조할 요소]
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> del a[1]
>>> a
[1, 3, 4, 5, 6, 7]
이런식으로 리스트의 요소를 제거하는 방법과
1-2. 리스트 인덱스를 이용해서 제거
리스트 인덱스를 이용해서 제거하는 함수는 'remove()'이다.
ex) remove(i)
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> a.remove(3)
>>> a
[1, 2, 4, 5, 6, 7]
>>> a.remove(9)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
또, remove()를 사용할 때 겪을 수 밖에 없는 error가 있다. for문에서 remove를 사용하면서 요소들을 지워나가면 요소는 제거되었지만 참조하는 index는 그대로 +1이 되기 때문에 문제가 생긴다.
한 마디로 remove과정에서 원본 리스트를 사용하면 문제가 된다.
for i in list1[:]:
if i >= x:
list1.remove(i)
이 문제를 고치는 방법은 매우 간단하다. for문에서 list의 원본을 사용하는 것이 아니라 list1[:]처럼 복사본을 사용하면 된다. 실제로 remove하는 리스트는 원본 리스트이지만, 참조하는 리스트는 복사본인 것이다!
2. 리스트 요소 한 줄로 출력해야 할 경우
' '.join(리스트_이름)이 원래 알고 있는 방법이었는데, join함수 같은 경우에는 문자열밖에 반환을 하지 못한다고 한다. 그러므로 int로 구성되어 있는 리스트의 경우 매우 간단하게 print(*리스트이름) 이렇게 처리하면 된다.
참고한 사이트
https://yeomss.tistory.com/160
Python 리스트 요소 한줄에 한번에 출력하기
알고리즘을 풀다가 보면 1차원 리스트 요소를 아래와 같이 한번에 출력하고 싶을 때가 있습니다. arr = [1, 2, 3, 4] ➡️ 1 2 3 4 보통 for 문을 이용하여 출력하는 경우가 많습니다. for x in arr: print(x, en
yeomss.tistory.com
python | list에서 remove 사용 시 주의할 점
다음과 같은 리스트가 있다. num_list=[15,16,22,28] 홀수인 15만을 남기기 위해 짝수를 제거하는 코드를 작성했고, 결과는 다음과 같았다. 22는 짝수인데 왜 지워지지 않고 남아있는 거지? 그 이유는 다
dduniverse.tistory.com