파이썬의 집합 데이터 타입
파이썬에는 여러 개의 데이터를 담는 집합 데이터 타입들이 있다.
list 순서 있음. 중복 허용. mutable
tuple 순서 있음. 중복 허용. immutable
set 순서 없음. 중복 허용 안 함.
dict 순서 없음. key와 value 쌍으로 구성.
list
list는 []으로 만들고, 각 데이터(원소)들은 콤마로 구분한다.
데이터(원소) 타입은 어떠한 타입도 가능하다.
비어있는 리스트(empty list)도 만들 수 있다.
인덱싱(index)
list의 데이터는 순서가 존재한다.
따라서 배열처럼 index 값을 이용해 접근할 수 있다.
파이썬도 다른 언어들과 마찬가지로 index 값의 시작은 0이다.
만약 존재하지 않는 index를 참조하려고 하는 경우 IndexError가 발생한다.
파이썬은 음수로 인덱스 값에 접근할 수 있다.
음수 인덱싱은 가장 뒤의 값부터 -1로 시작한다.
따라서 리스트의 첫 번째 값은 리스트의 길이에 -를 붙여준 것과 같다.
len()
len() 함수의 매개변수에 list를 넣는 경우, list 원소 개수를 반환한다.
len() 함수 매개변수에 string 값을 넣으면 그 문자열의 길이를 반환한다.
list 원소 추가와 삭제
append()로 리스트의 맨 뒤에 데이터 원소를 추가하고,
del()로 리스트의 데이터 원소를 삭제할 수 있다.
In [7]에서 append() 함수를 사용하여 tiger 데이터를 추가하였다.
이때 Out 값으로 나온 것이 아무것도 없는데, Out 값으로 반환된 게 None인 경우 원본이 변화되었다는 의미이다.
위처럼 문자열끼리 + 연산을 하는 건 원본 문자열이 변하지 않으므로 Out [10]에서 반환 값이 있는 걸 확인할 수 있다.
list의 원소 삭제는 del()로 할 수 있다고 하였는데,
가장 맨 뒤에 추가되는 append()와는 달리 del()은 특정 위치에 있는 값을 삭제할 수 있다.
In [15]처럼 인덱스 슬라이싱을 사용해 데이터를 삭제할 수도 있다.
list 연산 (+, *)
두 개의 list를 +하고, 한 개의 list를 * 해보았다.
animals list와 colors list가 합쳐진 결과가 출력되었고,
animals list가 2번 출력되었다.
+, * 연산은 원본 값이 변화되지 않는다.
extend(iterable)
앞전에 살펴봤던 + 연산보다 성능이 좋은 것이다.
extend()는 원본을 변화시킨다.
animals에 extend() 함수를 사용한 것이어서 animals list는 값이 바뀌었고, colors list는 변화 없다.
append() 대신 extend()를 사용할 수도 있다.
append()를 사용한 것과 결과는 같지만 extend를 사용하는 것이 속도가 더 빠르다.
list.extend(str)을 하는 경우 매개변수로 들어간 문자열 값이 쪼개져서 추가된다.
iterable이 아닌 값을 매개변수로 넣는 경우 TypeError가 발생한다.
슬라이싱 (slicing) [:] [::]
파이썬을 배울 때 가장 신기하고도 짜증 났던 것이다.
범위 연산자 : 를 이용해 일부분을 추출할 수 있다.
step 값(건너뛰는 값)을 사용할 수 있다.
가장 기본적인 슬라이싱 예제들이다.
[0:3] 의미는 3번째 값까지가 아닌 3번째 전 값(== 2번째 값)이라는 의미이다.
: 앞뒤로 아무런 값을 주지 않는 경우 전체를 뜻하는 것이고,
꼭 숫자 값이 들어가지 않고 변수가 들어가도 동작한다.
위와 같이 슬라이싱을 통해 데이터를 자유자재로 갖고 놀 수 있다.
처음에 :: 를 볼 때는 생소했고 무슨 의미인지도 몰랐는데 step 값을 사용한다는 걸 알게 되었다.
[a:b:c] 만약 이렇게 슬라이싱을 한다고 할 때 a는 시작 값이고 b는 종료 값, c는 step 값이다.
[::2] 와 같은 경우는 시작 값과 종료 값이 없고 step 값만 있는 것이다.
따라서 저 의미는 list 내 모든 데이터를 처음부터 가져오는데, 2 step 씩 건너뛰어 가져온다는 의미이다.
슬라이싱을 활용해서 list 중간에 데이터를 삽입할 수도 있다.
list 중간에 데이터 추가