728x90
반응형
리스트에 있는 값을 for문으로 하나하나 삭제해보려고 했지만, 계속 리스트 범위를 벗어났다는 등의 오류가 났습니다.
다음 코드를 보며, 어떤 오류가 있는지 살펴보겠습니다.
test = list(range(0, 10)) # test = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("original test : ", test)
for i in test:
test.remove(i)
print(test)
해당 코드를 실행시키면, 위와 같은 결과가 나옵니다.
문제의 원인은,
첫 번째 루프 때는 test의 0번째 원소를 지우므로 리스트는 [1, 2, 3, 4, 5, 6, 7, 8, 9]가 됩니다.
두 번째 for문을 돌 때는, test의 1번째 원소(test = [1, 2, 3, 4, 5, 6, 7, 8, 9])를 지우므로, 1을 건너뛰게 됩니다.
두 번째 for문이 끝나면 test = [1, 3, 4, 5, 6, 7, 8, 9]가 되고,
세 번째도 마찬가지로, test의 2번째 원소(test = [1, 3, 4, 5, 6, 7, 8, 9])를 지우기 때문에, 모든 원소에 대해 접근하지 않는다는 걸 확인할 수 있습니다.
원하는대로 데이터를 삭제하기 위해서는,
해당 리스트를 카피하는 방식으로 접근할 수 있습니다.
첫 번째 방법은 원래의 리스트를 다른 리스트에 카피해주는 것이고,
test = list(range(0, 10)) # test = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("original test : ", test)
temp = test[::]
for j in temp:
test.remove(j)
print(test)
두 번째 방법은, 다른 변수를 사용하기 싫다면,
test = list(range(0, 10)) # test = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("original test : ", test)
for j in test[::]:
test.remove(j)
print(test)
for 문 선언부에 test의 복사본을 두어도 동일한 결과를 얻을 수 있습니다.
* 리스트 값 제거(remove, delete) 하는 방법 알아보기 *
반응형
'Python > Python Basic' 카테고리의 다른 글
버블 정렬 (오름차순 정렬) - 공부하는 도비 (0) | 2022.10.28 |
---|---|
enumerate 내장 함수로 for문 돌리 - 공부하는 도비 (1) | 2021.12.06 |
문자열 안 숫자 포함 여부 확인 (str.isdigit(), any() 함수 사용) - 공부하는 도비 (1) | 2021.07.21 |
any(), all() 함수 사용하기 - 공부하는 도비 (1) | 2021.07.21 |
파이썬 2진수, 8진수, 10진수, 16진수 변환 (내장함수, format함수) - 공부하는 도비 (2) | 2021.07.21 |