파이썬은 문자열, 정수, 부울, 부동소수점과 같은 기본데이터 타입외에
기본타입들이 결합된 리스트(list), 튜플(tuple), 딕셔너리(dict) 그리고 셋(set)이라는 자료구조를 가지고 있다.
리스트부터 하나씩 살펴보자.
1. 생성
리스트를 생성할 때는 list() 함수와 대괄호([])를 이용해서 다음과 같이 생성할 수 있다.
>>> temp_list = list() # list() 함수 사용 >>> type(temp_list) # type() 함수를 사용하면 변수의 타입을 알 수 있다. <class 'list'> >>> temp_list2 = [] # [] 대괄호 사용 >>> type(temp_list2) <class 'list'> |
2. 데이터 입력
append() 함수를 이용해 데이터를 입력하게 되면 그 순서를 그대로 유지하면서, 리스트의 끝에 항목을 추가한다.
insert()함수를 이용하면 인자로 주는 오프셋 위치에 항목을 추가할 수 있다.
>>> temp_list.append('a') # 항목 'a' 추가 >>> temp_list.append('b') # 항목 'b' 추가 >>> temp_list ['a', 'b'] # 첫번째 입력된 a가 처음, 두번째 입력된 b가 두번째 위치하고 있다. >>> temp_list.insert(1,'c') # temp_list의 1번째 위치(현재 'b')에 'c'추가 >>> temp_list ['a', 'c', 'b'] # 'b'는 뒤로 밀려남 >>> temp_list.insert(50,'d') # 리스트 크기보다 큰 인자를 주면 리스트 마지막에 입력. 예외발생안함. >>> temp_list ['a', 'c', 'b', 'd'] |
3. 데이터 조회
리스트 변수명에 오프셋을 지정하면 그 위치의 데이터를 가져올 수 있다.
>>> temp_list[0] 'a' >>> temp_list[1] 'b' |
4. 데이터 수정
내용을 수정할 때는 오프셋을 지정하고, 항목을 할당하면 기존 데이터가 수정된다.
>>> temp_list ['a','b'] >>> temp_list[0] = 'c' # 기존 temp_list[0] 위치에 있던 'a'를 'c'로 변경 >>> temp_list ['c', 'b'] |
5. 데이터 삭제
데이터를 삭제할 때는 del 명령어나 remove()함수를 이용해서 삭제한다.
del 명령어는 삭제할 데이터의 위치를 지정해주면 되고,
remove() 함수는 인자로 삭제할 데이터 값을 전달해주면 삭제된다.
temp_list 리스트에 temp_list[0] 위치에 있는 'c' 항목을 삭제해보도록 하겠다.
>>> del temp_list[0] # del 명령어 뒤에 항목을 오프셋으로 지정하면 삭제 >>> temp_list ['b'] >>> temp_list.remove('c') # remove()함수에 인자로 실제 삭제할 값을 전달해주면 삭제 >>> temp_list ['b'] |
6. 리스트 확장 : 다른 리스트와 합체
리스트에 다른 리스트를 합칠 수 있다.
extend()함수를 사용하면 된다.
증가 연산자인 '+='을 사용해도 동일한 효과를 얻을 수 있다.
>>> temp_list.extend(['d','e']) # extend()를 이용한 리스트 확장 >>> temp_list ['c', 'b', 'd', 'e'] >>> temp_list += ['f','g'] # '+='을 이용한 리스트 확장 >>> temp_list ['c', 'b', 'd', 'e', 'f', 'g'] |
7. 다른 자료구조를 리스트로 변환
리스트를 생성할 때 사용한 list()함수를 사용하면 다른 자료구조를 리스트로 변환할 수 있다.
문자열, 튜플, 딕셔너리, 셋 등 모든 자료구조가 변경 가능하다.
한가지 주의할 점은 딕셔너리의 경우 키와 값이 존재하는데, list()함수로 변환하면 키만 리스트로 변환된다.
>>> letters = 'dongdongfather' >>> l_list = list(letters) # 문자열을 리스트로 변환 >>> l_list ['d', 'o', 'n', 'g', 'd', 'o', 'n', 'g', 'f', 'a', 't', 'h', 'e', 'r'] >>> tuple_data = ('a','b','c','d') >>> type(tuple_data) # type()함수를 사용하면 자료형을 알 수 있다 <class 'tuple'> >>> t_list = list(tuple_data) # 튜플을 리스트로 변환 >>> t_list ['a', 'b', 'c', 'd'] >>> set_data = {1,3,5,7,9} >>> type(set_data) <class 'set'> >>> s_list = list(set_data) # 셋을 리스트로 변환 >>> s_list [1, 3, 5, 7, 9] >>> dict_data = {'a':1, 'b':2, 'c':3} >>> d_list = list(dict_data) # 딕셔너리의 리스트 변환 >>> d_list ['a', 'b', 'c'] # 키만 리스트로 변환된다 |
7. 유용한 함수 및 명령어들
1) 항목을 가져오면서 삭제 : pop()
pop()함수는 리스트에서 항목을 가져오는 동시에 그 항목을 삭제한다.
인자를 주지 않으면 제일 오른쪽 항목을, 인자를 주면 인자의 위치에 해당하는 항목을 처리한다.
>>> temp_list ['a', 'c', 'b', 'd'] >>> temp_list.pop() # 인자없이 호출하면 오른쪽 마지막 항목 가져오고 삭제 'd' >>> temp_list ['a', 'c', 'b'] >>> temp_list.pop(0) # 인자 0을 주면, 0번째 위치의 'a'를 가져오고 삭제 'a' >>> temp_list ['c', 'b'] |
2) 값으로 오프셋 찾기 : index()
인자로 주어진 항목의 오프셋이 얼마인지 알아볼때 index()함수가 유용하다.
인자로 항목을 주면, 오프셋을 반환한다.
>>> temp_list ['c', 'b'] >>> temp_list.index('b') # 'b'의 오프셋인 1을 반환한다. 1 |
3) 존재여부 확인 : in
리스트에 항목이 존재하는지 알고자 할때는 in 명령어를 사용한다.
항목이 존재하면 True, 없으면 False를 리턴한다.
>>> temp_list ['c', 'b'] >>> 'c' in temp_list True >>> 'd' in temp_list False |
4) 개수 세기 : count()
count()함수는 특정 항목의 개수를 알아내기 위해 사용한다.
인자로 값을 주지 않으면 예외를 발생시킨다.
그 말은 전체 개수를 파악하는데 사용하기는 힘들다는 말이다.
그때는 len()함수를 사용하면 된다.
>>> temp_list ['c', 'b', 'a', 'a'] >>> temp_list.count('a') # 'a'항목의 개수를 리턴한다. 2 >>> temp_list.count() # 인자를 주지 않으면 예외를 발생시킨다. Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: count() takes exactly one argument (0 given) |
5) 문자열로 변환하기 : join()
리스트를 문자열로 변환할때는 join() 함수를 쓴다.
먼저 각 항목을 이어붙일 문자열을 적어주고, 그 문자열로 join()함수를 호출해서 리스트를 이어붙인다.
아래의 예를 보면 사용법이 명확해진다.
>>> temp_list ['c', 'b', 'a', 'a'] >>> letters = ','.join(temp_list) # 콤마(',')를 이용해 리스트를 문자열로 이어붙인다. >>> letters 'c,b,a,a' >>> letters2 = '-'.join(temp_list) # 대쉬('-')를 이용해 리스트를 문자열로 이어붙인다. >>> letters2 'c-b-a-a' |
6) 정렬하기 : sort(), sorted()
리스트를 정렬할 때는 두가지 함수를 쓸 수 있다.
sort()는 리스트의 메서드로서 리스트 자체를 정렬할 수 있다.
sorted() 함수는 내장함수로서 리스트를 정렬한 값을 리턴한다.
sort()함수와 달리 sorted()함수의 인자로 주어진 리스트는 정렬되지 않는다.
>>> temp_list ['c', 'b', 'a', 'a'] >>> sorted_list = sorted(temp_list) # temp_list를 정렬하여 sorted_list 변수에 할당한다. >>> sorted_list # sorted_list는 정렬됨 ['a', 'a', 'b', 'c'] >>> temp_list # 인자로 주어진 temp_list는 정렬되지 않음. ['c', 'b', 'a', 'a'] >>> temp_list.sort() # temp_list의 메서드 sort()를 호출하여 정렬 >>> temp_list ['a', 'a', 'b', 'c'] # temp_list 정렬됨 |
7) 복사하기 : copy()
한 리스트를 두개의 변수에 할당한 후, 리스트값을 변경하면 다른 변수에 할당된 리스트로 같이 변경된다.
두 변수가 같은 주소에 있는 리스트를 참조하기 때문에 이 같은 상황이 벌어진다.
>>> temp_list ['a', 'a', 'b', 'c'] >>> temp_list2 = temp_list # temp_list에 있는 주소를 temp_list2에 할당 >>> temp_list ['a', 'a', 'b', 'c'] >>> temp_list2 ['a', 'a', 'b', 'c'] >>> temp_list2[0] = '00000' # temp_list와 temp_list2가 같은 주소를 보고있어, >>> temp_list2 # 한쪽 변수를 이용해 항목을 변경하면, 다른 변수 참조값도 변경됨. ['00000', 'a', 'b', 'c'] # 같은 리스트를 참조하고 있으니 당연한것. >>> temp_list ['00000', 'a', 'b', 'c'] |
이런 상황은 이후에 큰 문제를 야기할 수 있기 때문에, 같은 리스트가 필요하다면 복사를 해서 다른 변수에 할당을 해주어야 한다.
이때 필요한 함수가 copy()이다.
>>> temp_list2 = temp_list.copy() # temp_list를 복사하여 그 복사본을 temp_list2에 할당 >>> temp_list ['a', 'a', 'b', 'c'] >>> temp_list2 # temp_list와 temp_list2는 같은 값을 가지지만 다른 리스트 ['a', 'a', 'b', 'c'] >>> temp_list2[0] = '00000' # temp_list2의 값을 변경해도, >>> temp_list2 ['00000', 'a', 'b', 'c'] >>> temp_list # temp_list의 값은 바뀌지 않음 ['a', 'a', 'b', 'c'] |
'IT' 카테고리의 다른 글
[파이썬 기초] 자료구조(3) - 딕셔너리 (0) | 2018.12.05 |
---|---|
[파이썬 기초] 자료구조(2) - 튜플 (0) | 2018.12.04 |
[파이썬 기초] 파이썬 문자열(4) - 유용한 문자열 함수들 (0) | 2018.11.26 |
[파이썬 기초] 파이썬 문자열(3) - 문자열 나누기, 결합하기 (0) | 2018.11.23 |
[파이썬 기초] 파이썬 문자열(2) - 문자열 연산자 및 추출 (0) | 2018.11.23 |