지난 포스팅에서 Python의 기초가 되는 변수 선언부터, 함수와 메서드의 차이까지 알아보았다. 이번 포스팅에서는 우리가 가장 많이 사용할 컨테이너 자료형에 대해 알아보자. 컨테이너 자료형이란 여러 값을 묶어서 갖는 자료형으로, list, tuple, set, Dictionary가 여기에 해당한다. 먼저, 가장 많이 사용되는 list에 대해 정리해보았다.
list(리스트)
리스트는 여러 값을 묶어서 갖는 컨테이너 자료형으로, 대괄호([ ]) 안에 콤마로 구분한 값을 나열하여 생성한다. 리스트의 요소로는 어떤 데이터도 올 수 있으며, 리스트 자체도 요소가 될 수 있다.
1. 리스트 생성
비어있는 리스트를 만들 수도 있고, 같은 자료형이나 여러 자료형의 데이터를 요소로 갖는 리스트를 만들 수 있다. 또한, 리스트를 요소로 갖는 리스트를 만들 수도 있다. 연속된 정수로 리스트를 만들 때는 range() 함수를 사용하면된다. range() 함수의 문법은 다음과 같으며, 이후 포스팅할 반복문에서도 사용된다.
- range(n) : 0부터 n-1까지의 정수 범위
- range(m,n) : m부터 n-1까지의 정수 범위가 된다.
- range(m,n,x) : m부터 n-1까지 x만큼의 증가하는 정수가 된다. x를 음수로 설정하면, 점점 값이 작아진다.
# 비어있는 리스트 생성
empty_list = []
print(empty_list) # 출력: []
# 여러 자료형을 갖는 리스트 생성
varied_list = [1, "two", 3.0, True]
print(varied_list) # 출력: [1, 'two', 3.0, True]
# 리스트를 요소로 갖는 리스트 생성
nested_list = [1, 2, [3, 4, 5]]
print(nested_list) # 출력: [1,2, [3, 4, 5]]
# range() 함수를 사용한 리스트 생성
range_list = list(range(10))
range_list2 = list(range(1,10,2))
print(range_list) # 출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(range_list2) # 출력: [1, 3, 5, 7, 9]
2. 리스트 인덱싱
특정 요소를 찾기 위해 인덱스를 사용하는 과정을 인덱싱이라고 한다. 인덱스는 대괄호([ ]) 안에 지정하며, 순방향 인덱스는 0부터 시작하고, 역방향 인덱스는 -1부터 시작한다.
# 리스트 인덱싱
print(varied_list[0]) # 출력: 1
print(varied_list[-1]) # 출력: True
3. 리스트 슬라이싱
인덱스를 사용하여 특정 범위의 요소를 찾는 과정을 슬라이싱이라고 한다. 대괄호 안에 [m:n] 형태로 범위를 지정하여 요소를 확인할 수 있다. 인덱스 m부터 n-1까지의 결과가 포함되며, 인덱스 n의 요소는 결과에 포함되지 않는다.
# 리스트 슬라이싱
print(varied_list[1:3]) # 출력 ['two', 3.0]
4. 리스트 연산
더하기는 리스트의 결합을, 곱하기는 문자열과 동일하게 리스트의 반복을 의미한다. 단, 빼기와 나누기 연산은 불가능하다.
# 리스트 더하기
added_list = varied_list + [False, "end"]
print(added_list) # 출력: [1, 'two', 3.0, True, False, 'end']
# 리스트 곱하기
multiplied_list = varied_list * 2
print(multiplied_list) # 출력: [1, 'two', 3.0, True, 1, 'two', 3.0, True]
5. 요소 변경, 추가, 삭제
인덱싱 또는 슬라이싱 결과에 대해 요소를 변경하거나 삭제할 수 있다. 이 때, append(), remove() 메서드를 사용하여 요소를 추가 또는 삭제할 수 있다.
# 요소 변경
varied_list[0] = "one"
print(varied_list) # 출력: ['one', 'two', 3.0, True]
# 요소 추가
varied_list.append("end")
print(varied_list) # 출력: ['one', 'two', 3.0, True, 'end']
# 요소 삭제
varied_list.remove("end")
print(varied_list) # 출력: ['one', 'two', 3.0, True]
6. 리스트 관련 메서드
- count() : 특정 요소의 개수 반환
- index() : 특정 요소의 인덱스 반환
- append() : 리스트의 마지막에 요소를 추가
- extend() : 리스트 뒤에 리스트를 붙일 수 있음. 이 때, 2차원 리스트가 아닌 1차원 리스트로 결합
- reverse() : 리스트의 요소 순서를 역순으로 변경
- sort(reverse=False) : 리스트의 요소를 오름차순으로 정렬, 내림차순은 reverse = True 사용. 단, 리스트 요소들의 자료형이 다른 경우 정렬 불가
- insert() : 리스트의 특정 인덱스에 요소 추가
- remove() : 리스트에서 특정 요소 삭제
- pop() : 리스트의 마지막 요소를 제거하고, 그 요소를 반환
- clear() : 리스트의 모든 요소 제거
Tuple(튜플)
튜플은 리스트와 매우 비슷한 자료형으로, 소괄호(( ))를 사용하여 표현한다. 튜플의 가장 큰 특징은 한 번 생성하면 요소의 값을 바꿀 수 없다는 것이다. 또한, 튜플의 인덱싱, 슬라이싱, 연산 방법은 리스트와 동일하다.
1. 튜플 생성
리스트와 마찬가지로 여러 자료형의 데이터를 요소로 갖는 튜플을 만들 수 있다. 단, 요소가 하나인 튜플을 만들 때는 콤마를 추가하여 만들어야 한다. 소괄호를 생략할 수 있으므로, 여러 변수에 동시에 값을 대입하거나, 두 변수의 값을 교환하거나, 함수 리턴값을 두 변수에 대입하는 등의 활용이 가능하다.
# 튜플 생성
my_tuple = (1, 2, 3)
# 여러 자료형을 갖는 튜플
mixed_tuple = (1, "Hello", True)
# 요소가 하나인 튜플 생성
single_tuple = (1,) # 괄호와 콤마를 함께 사용
not_tuple = (90) # 콤마가 빠지면, 정수형 변수가 선언
# 소괄호 생략
multiple_assignment = 1, 2, 3
print(multiple_assignment) # 출력: (1, 2, 3)
# range() 함수 사용
nums = tuple(range(5))
print(nums) # (0,1,2,3,4)
# 두 변수의 값 교환
a = 1
b = 2
a, b = b, a
print(a, b) # 출력: 2 1
# 튜플 인덱싱
print(my_tuple[0]) # 출력: 1
# 튜플 슬라이싱
print(my_tuple[1:3]) # 출력: (2, 3)
# 튜플 연산
print(my_tuple + (4, 5)) # 출력: (1, 2, 3, 4, 5)
print(my_tuple * 2) # 출력: (1, 2, 3, 1, 2, 3)
Set(집합)
집합은 중복을 허용하지 않고, 순서가 없는 자료형이다. 이로 인해 인덱싱과 슬라이싱으로 값을 얻을 수 없다. 주로 교집합, 합집합, 차집합, 대칭 차집합 등의 집합 연산을 위해 사용할 수 있다.
1. 집합 생성 및 변환
set() 함수를 사용하여 다른 자료형을 집합으로 변환할 수 있다. 또한, 집합을 리스트나 튜플로 변환할 수도 있다.
# 집합 생성
my_set = set([1, 2, 3, 4, 5])
# 리스트를 집합으로 변환
my_list = [1, 2, 2, 3, 3, 3]
list_to_set = set(my_list)
print(list_to_set) # 출력: {1, 2, 3}
# 집합을 리스트로 변환
set_to_list = list(list_to_set)
print(set_to_list) # 출력: [1, 2, 3]
2. 집합 활용
이전 포스팅에서 소개한 함수와 연산자로 집합의 정보를 확인할 수 있다. len() 함수로 집합에 포함된 원소 개수를 확인할 수 있고, in 연산자로 특정 요소가 집합에 속해 있는지 확인할 수 있다. 또한, 집합의 특성을 활용하여 리스트나 튜플에서 중복된 요소를 제거할 수 있다.
# 집합의 요소 개수 확인
print(len(my_set)) # 출력: 5
# 특정 요소가 집합에 포함되어 있는지 확인
print(1 in my_set) # 출력: True
# 리스트에서 중복된 요소 제거
unique_list = list(set(my_list))
print(unique_list) # 출력: [1, 2, 3]
3. 집합 연산
합집합(| 또는 union()), 교집합(& 또는 intersection()), 차집합(- 또는 difference()), 대칭 차집합(^ 또는 symmetric_difference()) 등의 연산이 가능하다. 대칭 차집합이란, 합집합에서 교집합을 제외한 나머지를 뜻한다.
set1 = set([1, 2, 3])
set2 = set([2, 3, 4])
# 합집합
print(set1 | set2) # 출력: {1, 2, 3, 4}
print(set1.union(set2))
# 교집합
print(set1 & set2) # 출력: {2, 3}
print(set1.intersection(set2))
# 차집합
print(set1 - set2) # 출력: {1}
print(set1.difference(set2))
# 대칭 차집합
print(set1 ^ set2) # 출력: {1, 4}
print(set1.symmetric_difference(set2))
4. 집합 관련 메서드
- add() : 집합에 요소 추가
- update() : 집합에 여러 요소를 추가, 리스트 사용
- pop() : 집합에서 임의의 요소를 제거하고, 그 요소를 반환
- remove() : 집합에서 특정 요소 제거. 단, 요소가 없는 경우 error 발생
- discard() : 집합에서 특정 요소 제거. 단, 요소가 없어도 작동
- clear() : 모든 요소 삭제
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # 출력: {1, 2, 3, 4}
my_set = {1, 2, 3}
my_set.update([4, 5, 6])
print(my_set) # 출력: {1, 2, 3, 4, 5, 6}
my_set = {1, 2, 3}
my_set.remove(4)
print(my_set) # 출력: Keyerror
my_set = {1, 2, 3}
my_set.discard(4)
print(my_set) # 출력: {1, 2, 3}
Dictionary(딕셔너리)
딕셔너리는 키(Key)와 값(Value)의 쌍을 요소로 가지는 자료형이다. 중괄호({ })를 사용하여 선언하며, 키를 통해 값을 확인할 수 있다. 단, 딕셔너리는 집합과 동일하게 순서의 의미가 없어 인덱싱과 슬라이싱은 불가능하다.
1. 딕셔너리 생성 및 변환
다양한 자료형을 키와 값으로 가질 수 있으며, dict() 함수를 사용하여 다른 자료형을 딕셔너리로 변환할 수 있다. 단, 키는 변경 가능한 자료형은 사용할 수 없으므로 리스트는 키로 사용할 수 없다.
# 딕셔너리 생성
my_dict = {"name": "John", "age": 30, "city": "New York"}
# 다양한 자료형을 가진 딕셔너리
mixed_dict = {1: "one", "two": 2, 3.0: "three"}
# 리스트를 딕셔너리로 변환
list_to_dict = dict([(1, "one"), (2, "two")])
print(list_to_dict) # 출력: {1: 'one', 2: 'two'}
2. 딕셔너리 조회 및 변경
키를 사용하여 값을 찾을 수 있으며, in 연산자를 사용하여 해당 키의 존재 여부를 확인할 수 있다. 또한, 키를 이용하여 값을 변경하거나 추가할 수 있고, del 문이나 pop(), popitem() 메서드를 사용하여 요소를 삭제할 수도 있다.
# 키를 사용하여 값 조회
print(my_dict["name"]) # 출력: 'John'
# in 연산자를 사용하여 키 존재 여부 확인
print("name" in my_dict) # 출력: True
# 값 변경
my_dict["name"] = "Jane"
print(my_dict) # 출력: {'name': 'Jane', 'age': 30, 'city': 'New York'}
# 값 추가
my_dict["country"] = "USA"
print(my_dict) # 출력: {'name': 'Jane', 'age': 30, 'city': 'New York', 'country': 'USA'}
# 요소 삭제
del my_dict["country"]
print(my_dict) # 출력: {'name': 'Jane', 'age': 30, 'city': 'New York'}
3. 딕셔너리 관련 메서드
- keys() : 딕셔너리의 모든 키를 반환
- values() : 딕셔너리의 모든 값을 반환
- items() : 딕셔너리의 모든 key-value 쌍을 반환
- clear() : 딕셔너리의 모든 요소 제거
- get() : 딕셔너리에서 특정 키에 대한 값을 반환, 키가 없는 경우 None을 return
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
print(my_dict.keys()) # 출력: dict_keys(['name', 'age', 'city'])
print(my_dict.values()) # 출력: dict_values(['John', 30, 'New York'])
print(my_dict.items()) # 출력: dict_items([('name', 'John'), ('age', 30), ('city', 'New York')])
my_dict.clear()
print(my_dict) # 출력: {}
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}
print(my_dict.get('name')) # 출력: 'John'
print(my_dict.get('country')) # 출력: None'Aivle > Python' 카테고리의 다른 글
| [에이블스쿨] 가설 검정 및 이변량 분석 (0) | 2024.03.17 |
|---|---|
| [에이블스쿨] 단변량 분석 (0) | 2024.03.15 |
| [에이블스쿨] Pandas (0) | 2024.03.08 |
| [에이블스쿨] 제어문과 함수 (2) | 2024.03.04 |
| [에이블스쿨] 자료형 (0) | 2024.02.29 |