파이썬(python) – 리스트(List) 이해하고 활용하기 [첫번째]

이번 시간에는 python 에서 가장 많이 사용하는 List 에 대해 배워보겠습니다.
python 강의를 진행하다보니 제일 와닿은 강의 방법은 간단한 이론 배경을 설명하고 되도록 여러가지 예를 보여주는 방법인 것 같습니다.

List 는 다양한 타입의 값들을 모아둔 것이라고 생각하시면 됩니다. 리스트는 순서있는 문자들의 모둠이라는 점에서 문자열과 비슷하지만 리스트의 원소는 어떤 유형도 될 수 있다는 점이 다릅니다.
이러한 각각의 값들을 원소(element)라고 부르고, 이러한 값들은 지표(Index)를 이용하여 접근할 수 있습니다.
List 를 표현할 때는 대괄호('[]')를 사용합니다.

다음의 예들과 주석들을 하나하나 잘 보시면 List 에 대한 이해를 쉽게 하실 수 있습니다.
아래의 예들은 제가 흐름을 가지고 테스트한 결과이니 쭈욱 흐름대로 보시면 이해하실 수 있습니다.

sh> python
# list 를 사용할 때는 대괄호([] : square bracket)을 사용
>>> [1,2,3]      
[1, 2, 3]

# 숫자 1,2,3 을 list element 로 등록
>>> a = [1,2,3]  
>>> a
[1, 2, 3]

# 데이터형을 섞어서 list 에 넣을 수 있음.
>>> a = [1,2,'aaaa']   
>>> a
[1, 2, 'aaaa']

# list 의 첫번째 element 를 리턴 - string 의 문자를 접근하는 방법과 동일
>>> a[0]         
1

# list 의 두번째 element 를 리턴
>>> a[1]         
2

# list 의 모든 element 를 리턴
>>> a[:]         
[1, 2, 'aaaa']

# list 의 첫번째 element 값을 변경
>>> a[0] = 13    
>>> a
[13, 2, 'aaaa']

# string 객체처럼 list 의 길이를 볼 수 있음.
>>> len(a)       
3

# list 객체인 a 의 symbol list 를 볼 수 있음.
>>> dir(a)       

['__add__', '__class__', '__contains__', '__delattr__', 
'__delitem__', '__delslice__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__getitem__', 
'__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', 
'__init__', '__iter__', '__le__', '__len__', '__lt__', 
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__reversed__', '__rmul__', '__setattr__', 
'__setitem__', '__setslice__', '__sizeof__', '__str__', 
'__subclasshook__', 'append', 'count', 'extend', 'index', 
'insert', 'pop', 'remove', 'reverse', 'sort']

# string 이나 다른 변수의 연산처럼 list 도 동일한 방식으로 연산 가능
>>> [1,2,'aaa'] + [3,4]   
[1, 2, 'aaa', 3, 4]

# list 변수 a 와의 + 연산
>>> a + [3,4]      
[13, 2, 'aaaa', 3, 4]

# list 객체 a 의 count 멤버함수를 사용하는 법을 document 로 확인
>>> help(a.count)  

# 3 이라는 숫자가 a list 에 몇번 들어있나 확인
>>> a.count(3)     
0

# 2 라는 숫자가 a list 에 몇번 들어있나 확인
>>> a.count(2)     
1
>>> a = [1,2,3]

>>> b = a

# 복사를 하는 것이 아니고 단지 b 가 a 객체를 똑같이 가리키도록 (포인터)
>>> b              
[1, 2, 3]

# a 의 첫번째 element 값을 변경하니
>>> a[0] = 13      

>>> a
[13, 2, 3]

# b 의 list 도 변경되어 있는 것을 볼 수 있음.
>>> b              
[13, 2, 3]

# 마찬가지로 b 를 변경해도
>>> b[0] = 77      

# a 또한 변경되어 있음.
>>> a              
[77, 2, 3]

>>> b
[77, 2, 3]

# list a 에 element 를 추가했을 때는 a 에는 적용이 되지만
>>> a = a + [4,5]  

>>> a
[77, 2, 3, 4, 5]

# b list 에는 보이지 않음을 주의
>>> b               
[77, 2, 3]

# 다시 할당하면 다시 같아짐.
>>> b = a          
>>> b
[77, 2, 3, 4, 5]
>>> a
[77, 2, 3, 4, 5]

위처럼 b 가 a 를 가리키는 포인터가 아니라 완전히 별도의 list 로 분리 복제하고 싶을 때...
c++ 에서는 이렇게 사용하는 경우들에 있어서 메모리 해제에 대한 신경을 써줘야하지만,
python 은 gabage collector 가 알아서 정리해줍니다. 그냥 마구 사용하면 됩니다.

>>> a = [1,2,3]
>>> a[:]
[1, 2, 3]

# 이렇게 하면 b 영역을 따로 잡고 복제한다.
>>> b = a[:]    
>>> b
[1, 2, 3]

# a 의 element 를 변경해도
>>> a[0] = 13   
>>> a
[13, 2, 3]

# b 는 변하지 않는다.
>>> b           
[1, 2, 3]

# list 가 같은지 확인
>>> a == b      
False

list 의 element 를 하나씩 자동으로 접근하고 싶을 때는 for 구문을 사용합니다.

>>> a = [1,2,3]

# num 변수에 a list 의 element 를 차례로 담아준다.
>>> for num in a: print num  
... 
1
2
3

# 두줄로 나누어쓸 경우
>>> for num in a:   
...   print num
... 
1
2
3

다음 시간에 list 에 대해 좀 더 배워보겠습니다.

You may also like...

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x