본문 바로가기

코드연습/Python

for과 remove, del을 이용해서 item 삭제 시 유의할 점.

728x90
N, X = map(int, input().split())
data = list(map(int, input().split()))

for i, d in enumerate(data):
    print(i, d)
    if d > X:
        del data[i]
print(data)

위와 같이 for 과 remove, del을 이용해서 item을 삭제 반복하는데, 삭제된 바로 다음 item들은 무시하고 지나가는 문제가 있었다.

 

문제는 단순하게 remove, del을 수행하게 되면 원본의 list의 item이 삭제 되기 때문에 그 시점의 list에서 반복이 실행되게 되므로, index가 맞지 않는 문제가 발생된다.

 

따라서, 위 같은 구문을 수행하려면 복사본 list를 만들고 그에 따라서 필요한 구문을 작성해야 한다.

N, X = map(int, input().split())
data = list(map(int, input().split()))
data_c = data.copy()
for i, d in enumerate(data_c):
    if d > X:
        data.remove(d)
print(data)

'코드연습 > Python' 카테고리의 다른 글

while 과 try, except를 적절하게 사용.  (0) 2022.04.01
input() v.s. sys.stdin.readline()  (0) 2022.03.31
HackerRank | Day 8: Dictionaries and Maps  (0) 2021.12.29
HackerRank | Capitalize!  (0) 2021.12.19
HackerRank | Alphabet Rangoli  (0) 2021.12.19