몰입공간
[Python] 리스트를 초기화하려면 list comprehension(using list comprehension for initialization) 본문
Programming/Python
[Python] 리스트를 초기화하려면 list comprehension(using list comprehension for initialization)
sahayana 2022. 5. 13. 18:37
#1. 지능형 리스트 (List Comprehesion)
파이썬에서 리스트를 생성하는 방법은 여러가지가 있습니다.
alphabet = ['A','B','C','D']
alphabet = list('ABCD')
alphabet = 'A,B,C,D'.split(',')
alphabet = [alphabet for alphabet in 'ABCD'] # 지능형 리스트 (List Comprehesion)
이 밖에 filter, map 객체에 list로 감싼다던가 하는 방식으로 리스트를 만들 수 있습니다.
지능형 리스트는 변수 = [ 지역변수 for 지역변수 in iterator ] 식으로 만들며 새로운 리스트를 생성합니다.
[ ] 안은 파이썬 함수처럼 고유한 지역 범위를 가집니다.
(참고로 괄호()로 감싸면 제너레이터 표현식입니다.)
#2. 지능형 리스트로 내포된 리스트 생성하기
내포된 리스트(nested list)를 초기화하는 경우, 지능형 리스트를 쓰는게 맞습니다.
# 지능형 리스트의 경우 내포된 리스트는 다른 참조 값을 가진다
>>> listcomp = [ ['O'] * 3 for i in range(3)]
>>> listcomp
[['O', 'O', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]
>>> listcomp[0][1] = 'X'
>>> listcomp
[['O', 'X', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]
>>> id(listcomp[0])
2355342791424
>>> id(listcomp[1])
2355342791680 # id 값이 다르다.
>>> nesting_list = []
>>> for i in range(3):
... nested_list = ['O'] # 새로운 list 객체를 생성하여 append
... nesting_list.append(nested_list)
다음과 같이 곱연산으로 표현한 리스트는 형태는 같아보이지만 내포된 리스트는 같은 주소를 참조합니다.
# 곱연산으로 nested list 생성할 경우
>>> multiplelist = [['O'] * 3] * 3
>>> multiplelist
[['O', 'O', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]
>>> multiplelist[0][1] = 'X'
>>> multiplelist
[['O', 'X', 'O'], ['O', 'X', 'O'], ['O', 'X', 'O']]
>>> id(multiplelist[0])
2355344767744
>>> id(multiplelist[1])
2355344767744 # id 값이 같다.
>>> nesting_list = []
>>> nested_list = ['O']
>>> for i in range(3):
... nesting_list.append(nested_list) # 동일한 주소를 참조하는 리스트를 append
'Programming > Python' 카테고리의 다른 글
[Python] sort()와 sorted() 차이점 (Difference between sort() and sorted()) (0) | 2022.05.27 |
---|---|
[Python] defaultdict과 __missing__() 메서드 (Defaultdict and __missing__() method in builtin dict class) (0) | 2022.05.15 |
[Python] 네임드튜플 (namedtuple) (0) | 2022.04.19 |
[Python] 멀티 프로세스와 멀티 스레드 (Multi process, multi thread and context switching) (0) | 2022.03.06 |
[Python] 제너레이터 (Generator) (0) | 2022.02.24 |
Comments