세 차례에 걸쳐 포스팅한 string 데이터 타입의 기본 이해와 문자 인코딩(character encoding), string method를 끝으로 Python의 기본 데이터 타입인 string의 설명을 마치고, 본 회에서는
컬렉션 데이터 타입의 대표 주자인 리스트(list)에 대해 알아보겠습니다.
잠깐
파이썬 변수(variable)와 식별자(identifier) 편에서 설명하였던 데이터 타입을 회고해 보면, ....
Python 데이터 타입(Data Type)은 기본 데이터 타입(basic data type)과
컬렉션 데이터 타입(collection data type)이 있습니다.
◆ 기본 데이터 타입(basic data type) : int, float, str, bool
◆ 컬렉션 데이터 타입(collection data type) : list, tuple, dict
기본 데이터는 말 그대로 기본적으로 통상 사용하는 타입이고, 컬렉션 데이터 타입은 기본 데이터 타입이 혼용되어 집단으로 존재하는 데이터 타입입니다. 예를 들어, list라는 데이터 타입의 변수 a는 다음과 같이 정의할 수 있습니다.
a = ['홍길동', '남자', 43, 175, 81.6]
즉, a는 여러 타입이 다 같이 모여있는 형태의 컬렉션 데이터 타입 list 입니다.
저 개인적인 의견으로는 list와 tuple 같은 데이터 타입을 쉽게 사용할 수 있는 것이 Python의 가장 큰 장점이 아닐까 생각합니다. 그럼, 본격적으로 list의 세계로 들어가 보겠습니다.
list란 서로 다른 객체(object)를 보관할 수 있는 데이터 구조로, list 내 객체의 순서로 액세스됩니다. list는
각괄호([] ; square bracket) 안에 콤마(,)로 구별하여 각 항목(element)를 보관합니다. 예를 들어,
my_list에서 보면, my_list[4]는 list 내 또 다른 list 데이터 타입, list[5]는 튜플(tuple)임을 알 수 있습니다. 따라서, my_list[4] 내에 있는 'yes' 라는 1번째 element를 액세스하기 위해서는 또 다른 인덱싱으로 액세스 가능합니다. 즉, my_list[4][0] 은 'yes'를, my_list[4][1] 은 2를 표현합니다.
여기서 잠깐 다차원 리스트에 대해 알아보겠습니다.
특별히 list 내 list가 존재하는, 즉 list의 list로 저장 관리되는 다차원 구조를
다차원 리스트(Multi-dimensional List) 또는 중첩리스트(nested list)라고 합니다. 예를 들어, 각각 [이름, 나이, 몸무게]를 표현하는 구조를 생각해보면,
multi-dimensional list 내 list element 액세스 방식은 [인덱스][서브인덱스] 의 표현으로 가능합니다.
위의 예에서 multi_list[0][0]은 '홍길동'을, multi_list[1][1]은 34를, multi_list[2][0]은 '장길산'을, multi_list[2][2]는 66을 각각
표시합니다.
my_list의 type() 함수를 통한 데이터 타입과 인덱스를 통해 list 내 항목을 확인해 보면,
Python의 list 예
*type(변수명) 함수는 해당 변수명의 데이터 타입을 가져옵니다.
print(my_list, type(my_list)) 명령어 결과를 보면, my_list 출력과 함께 my_list의 data type인 "<class 'list'>"가 나온 것을 확인 할 수 있습니다.
my_list[4]를 출력하면, 4번 인덱스 정보인 ['yes', 2]가 출력되고, 'yes'를 액세스하기 위해서는 my_list[4][0]과 같이 다차원 인덱스를 활용하여 액세스합니다.
다음 처리는 my_list의 data
type을 type() 함수로 체크하여, 해당 element가 'list' 또는 'tuple'일 경우, 해당 element의 각 정보까지 별도로 출력하는 예제입니다.
Python의 list 내 element 출력 예
*len(변수명) 함수는 해당 변수명의 element 크기를 가져옵니다. my_list의 크기는 0, 1, ..., 5의 인덱싱으로 총 6개의 element를 갖고 있으므로, len(my_list) = 6입니다.
*for 반복변수 in range(시작index, 끝index) 명령어는 반복변수의 값이 "시작index~(끝index-1)" 만큼 반복되어 실행되는 명령어입니다. 따라서, range(0, len(my_list))는 0, 1, 2, 3, 4, 5의 값으로 반복되어 총 6회 실행됩니다.
*type()을 check 하기 위해서는 "<class 'list'>' 값을 str() 함수로 변환하여 일반 string으로 바꾼 후, 그 단어에 'list' 또는 'tuple' 이 있는지를 체크합니다.
* in 은 identitiy 연산자로 해당 데이터의 존재 여부를 체크하는 연산자입니다.
전체의 element를 데이터 타입과 함께 출력하고, 그 타입이 list 또는 tuple일 경우 추가 반복 loop을 실행하여 my_list[4][0], my_list[4][1] 등을 출력합니다.
Python의 list에는
string과 마찬가지로 slicing, concatenation(+)(합치기)와 repetition(*)(반복하기) 기능이 있습니다. +는 각 list를 순차 반복하여 하나의 list로 만들어주고, '*는 해당 list를 지정 횟수만큼 반복하여 신규 list를 만드는 기능입니다.
list slicing 화면 예)
Python의 list slicing 예
list1은 positive indexing을 활용하여 생성한 list로 0, 1, 2 index의 element로 신규 생성됨
list2는 negative indexing을 활용하여 생성한 list로 -5, -4, -3 index의 element로 신규 생성됨
list3은 step을 활용하여 생성한 list로 0 index부터 2의 step으로 끝
index까지, 즉 0, 2, 4 index의 element가 신규 생성됨
list 의 concatenation(+)(합치기)와 repetition(*)(반복하기) 기능을 예제를 통해 알아보면,
다음으로 list의 개별 element를 변경할 수 있는지의 여부를 확인해 보겠습니다. 전에 string 편에서 list는 "mutable"한 것으로 설명하였는데 확인하여 보겠습니다.
Python 내에 이렇게 indexing으로 해당 데이터 타입의 element를 바꿀 수 있는 것을 "mutable"로, 변경 불가한 것을 "immutable"하다고 합니다. Python의 string 및 tuple은 immutable한데 반해, list는 mutable 합니다.
Python의 list 내 element 변경(mutable) 예
"스스로 배우는 코딩" 블로그는 전문적인 컴퓨터과학(또는 컴퓨터공학)
및 코딩의 지식 없이 스스로 독학하여 컴퓨터 프로그래머가 되고자 하는 분을 위하여 파이썬 기초부터 단계별로 관련 정보를 포스팅하고자 합니다.
본 회에서는 Python의 list 및 multi-dimensional list의 기본 이해와 함께, list slicing, concatenation, repetition 처리, mutable(개별 element 값을 변경 가능)에 대해
알아보았습니다.