본문 바로가기

파이썬(Python)/어?(궁금증)3

함수에서의 리스트 수정..? 어제 몇 시간을 아래 코드 가지고 씨름하고 있었다...;; 결국 함수에서의 인자 전달 과정에 대해 여러 번 다시 찾아보았고, 배운 것이 많았다 ㅠㅠ def foo(input : list) -> None: input = [0] bar = [1,2,3] foo(bar) print(bar) # [1,2,3] (왜 [0]이 아니지? 라고 생각하셨다면, 처음의 저와 같은 생각을 하신 겁니다..ㅎ) 결론부터 이야기하자면, 위의 함수는 리스트를 수정하는 것이 아니라 재할당하는 것이다. 즉, 리스트를 수정하는 경우와 재할당하는 것은 다르다. 그러니까, 아래의 코드는 우리가 생각하는 대로 동작한다. def foo(input : list) -> None: input[-1] = 0 bar = [1,2,3] foo(bar) .. 2021. 2. 7.
List 가 비어있는지 확인하기 파이썬 코딩을 하면서, List가 비어있는지 확인하는 코드를 무심결에 'list == False' 형식으로 적었다가 에러가 발생했다. 리스트가 비어있는지의 여부를 올바르게 확인하는 방법을 정리해 보자. 우선, 아래는 실수하기 쉬운, 잘못된 코드들의 예시이다. list_empty = [] if list_empty == None: # 리스트는 'None'이라는 객체와 동일하지 않다. print('empty') if list_empty == False: # 리스트의 bool 값이 False인 것이지, list가 False와 같은 것이 아니다. print('empty') if list_empty is False: # 위와 동일. 메모리 주소까지 같냐고 묻는 것이므로 더더욱 말이 안 된다. print('empty.. 2021. 1. 27.
for문을 이용한 리스트의 원소 변경...어? 알고리즘 공부 중에 분명히 돌아야 될 것 같은 코드가 이상하게 돌길래 엄청 찾다가, 정말 생각지도 못한 곳에서 오류가 있었음을 알게 되었다. 그러니까, 단순히 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 .. 2021. 1. 23.