포시코딩

리스트 초기화 방법과 리스트 컴프리헨션 활용 본문

Python

리스트 초기화 방법과 리스트 컴프리헨션 활용

포시 2023. 4. 24. 17:04
728x90

개요

graph1 = [[], [], []]
graph2 = [[]] * 3
print('graph1: ', graph1)  # graph1:  [[], [], []]
print('graph2: ', graph2)  # graph2:  [[], [], []]
graph1[1].append(4)
graph2[1].append(4)
print('graph1: ', graph1)  # graph1:  [[], [4], []]
print('graph2: ', graph2)  # graph2:  [[4], [4], [4]]

혼자 공부하다 이상한걸 발견했는데 

위 코드처럼 생김새가 같은 graph1, graph2가 같은 코드에 대해 각기 다른 결과를 내고 있었다.

javascript에서 겪은 경험을 토대로 graph2는 안의 요소인 각 리스트가 다 같은 리스트를 참조하고 있어

하나에 값을 추가해도 모두 같은 리스트라 전부 추가된다는 것을 유추할 수 있었다.

 

그럼 항상 직접 리스트를 직접 써서 만들어줘야 하냐?

3개라면 직접 작성해도 금방 작성해서 문제가 없지만

리스트 개수가 더 많거나 상황에 따라 달라질 경우에는 문제가 된다.

 

해결

graph = [[] for _ in range(3)]
print('graph: ', graph)  # graph:  [[], [], []]
graph[1].append(4)
print('graph: ', graph)  # graph:  [[], [4], []]

위 문제는 리스트 컴프리헨션을 쓰면 간단히 해결된다.

이럴 경우 각 리스트 요소들은 각기 다른 리스트로 생성되기 때문에 위에서 겪은 문제가 발생하지 않는다.

728x90

'Python' 카테고리의 다른 글

[Python] 소수점 n 자리까지 출력  (0) 2023.05.16
[Python] 재귀함수 제한 높이기(setrecursionlimit)  (0) 2023.04.25
[Python] max에 조건 달기  (0) 2023.04.23
집합 자료형 set  (0) 2022.12.27
lambda, map()  (0) 2022.12.25