알고리즘 공부 중에 분명히 돌아야 될 것 같은 코드가 이상하게 돌길래 엄청 찾다가, 정말 생각지도 못한 곳에서 오류가 있었음을 알게 되었다.
그러니까, 단순히 for문을 이용하여 리스트의 원소들을 변경하고자 하는 것이었다. 물론 list comprehension으로 작성하여도 되겠지만, 그때는 list comprehension에 익숙하지 않았어서 굳이 for문을 이용했던 듯 하다.
문제를 단순화하면 다음과 같다.
list = [1,2,3,4,5]
# 잘못된 코드
for i in list:
i += 10
저 코드가 잘못된 이유는, i에 10을 더한 이후에, 해당 i가 다시 list의 원소로 대입되지 못한다는 것이다.
위의 잘못된 코드의 동작 원리는 다음과 같다.
i = 1
i += 10 -> i = 11
....그리고 끝???
이래서 문제였던 것이다. i는 1일 뿐이지, list[0] ~ list[4]의 위치를 가리키는 포인터 변수가 아니다.
따라서 코드를 다음과 같이 수정하여야 한다.
index = 0
for elem in list:
list[index] = elem + 10
index += 1
인덱스 변수를 따로 생성하여 elem의 값을 10 증가시킨 후 다시 원래 list에 대입하도록 하였다.
(나는 아직 for문도 제대로 이해하지 못하는 초짜였어...ㅠㅠ)
'파이썬(Python) > 어?(궁금증)' 카테고리의 다른 글
함수에서의 리스트 수정..? (0) | 2021.02.07 |
---|---|
List 가 비어있는지 확인하기 (0) | 2021.01.27 |
댓글