몰입공간

[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

 

Comments