이번 시간에는 python 에서 가장 많이 사용하는 List 에 대해 배워보겠습니다.
python 강의를 진행하다보니 제일 와닿은 강의 방법은 간단한 이론 배경을 설명하고 되도록 여러가지 예를 보여주는 방법인 것 같습니다.
List 는 다양한 타입의 값들을 모아둔 것이라고 생각하시면 됩니다. 리스트는 순서있는 문자들의 모둠이라는 점에서 문자열과 비슷하지만 리스트의 원소는 어떤 유형도 될 수 있다는 점이 다릅니다.
이러한 각각의 값들을 원소(element)라고 부르고, 이러한 값들은 지표(Index)를 이용하여 접근할 수 있습니다.
List 를 표현할 때는 대괄호('[]')를 사용합니다.
다음의 예들과 주석들을 하나하나 잘 보시면 List 에 대한 이해를 쉽게 하실 수 있습니다.
아래의 예들은 제가 흐름을 가지고 테스트한 결과이니 쭈욱 흐름대로 보시면 이해하실 수 있습니다.
sh> python
>>> [1,2,3] # list 를 사용할 때는 대괄호([] : square bracket)을 사용
[1, 2, 3]
>>> a = [1,2,3] # 숫자 1,2,3 을 list element 로 등록
>>> a
[1, 2, 3]
>>> a = [1,2,'aaaa'] # 데이터형을 섞어서 list 에 넣을 수 있음.
>>> a
[1, 2, 'aaaa']
>>> a[0] # list 의 첫번째 element 를 리턴 - string 의 문자를 접근하는 방법과 동일
1
>>> a[1] # list 의 두번째 element 를 리턴
2
>>> a[:] # list 의 모든 element 를 리턴
[1, 2, 3]
>>> a[0] = 13 # list 의 첫번째 element 값을 변경
>>> a
[13, 2, 'aaa']
>>> a
[1, 2, 'aaaa']
>>> len(a) # string 객체처럼 list 의 길이를 볼 수 있음.
3
>>> dir(a) # list 객체인 a 의 symbol list 를 볼 수 있음.
['__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']
>>>
>>> [1,2,'aaa'] + [3,4] # string 이나 다른 변수의 연산처럼 list 도 동일한 방식으로 연산 가능
[1, 2, 'aaa', 3, 4]
>>> a + [3,4] # list 변수 a 와의 + 연산
[1, 2, 'aaaa', 3, 4]
>>>
>>> help(a.count) # list 객체 a 의 count 멤버함수를 사용하는 법을 document 로 확인
>>> a.count(3) # 3 이라는 숫자가 a list 에 몇번 들어있나 확인
0
>>> a.count(2) # 2 라는 숫자가 a list 에 몇번 들어있나 확인
1
>>> a = [1,2,3]
>>> b = a
>>> b # 복사를 하는 것이 아니고 단지 b 가 a 객체를 똑같이 가리키도록 (포인터)
[1, 2, 3]
>>> a[0] = 13 # a 의 첫번째 element 값을 변경하니
>>> a
[13, 2, 3]
>>> b # b 의 list 도 변경되어 있는 것을 볼 수 있음.
[13, 2, 3]
>>> b[0] = 77 # 마찬가지로 b 를 변경해도
>>> a # a 또한 변경되어 있음.
[77, 2, 3]
>>> b
[77, 2, 3]
>>> a = a + [4,5] # list a 에 element 를 추가했을 때는 a 에는 적용이 되지만
>>> a
[77, 2, 3, 4, 5]
>>> b # b list 에는 보이지 않음을 주의
[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 = a[:] # 이렇게 하면 b 영역을 따로 잡고 복제한다.
>>> b
[1, 2, 3]
>>> a[0] = 13 # a 의 element 를 변경해도
>>> a
[13, 2, 3]
>>> b # b 는 변하지 않는다.
[1, 2, 3]
>>> a == b # list 가 같은지 확인
True
list 의 element 를 하나씩 자동으로 접근하고 싶을 때는 for 구문을 사용합니다.
>>> a = [1,2,3]
>>> for num in a: print num # num 변수에 a list 의 element 를 차례로 담아준다.
...
1
2
3
>>> for num in a: # 두줄로 나누어쓸 경우
... print num
...
1
2
3
출처 : http://cloudrain21.tistory.com/entry/파이썬python-리스트List-이해하고-활용하기-첫번째
'Python' 카테고리의 다른 글
python list sorting (0) | 2014.05.02 |
---|---|
python list2 (0) | 2014.05.02 |
python string (0) | 2014.05.02 |
python import, 들여쓰기 (0) | 2014.05.02 |
python interpreter (0) | 2014.05.02 |