리스트(list)
다양한 자료형을 담을 수 있는 배열: 리스트는 여러 종류의 값들을 담을 수 있으며, 숫자, 문자열, 객체 등 다양한 자료형을 포함할 수 있습니다.
중복 허용: 동일한 값을 여러 번 포함할 수 있습니다.
요소 추가와 삭제:
append(): 리스트의 끝에 값을 추가합니다.
insert(): 지정한 위치에 값을 삽입합니다.
extend(): 다른 리스트를 현재 리스트에 추가하여 확장합니다.
remove(): 리스트에서 첫 번째로 나오는 지정한 값을 삭제합니다.
del: 인덱스를 이용하여 리스트의 특정 요소나 슬라이싱을 삭제합니다.
슬라이싱과 인덱싱: 리스트의 요소에 접근하기 위해 인덱싱과 슬라이싱을 사용할 수 있습니다.
중첩된 리스트(Nested List): 리스트 안에 다른 리스트를 포함하여 다차원 배열을 생성할 수 있습니다.
튜플 (Tuple)
불변성(Immutable): 튜플은 생성된 후에 내용을 변경할 수 없습니다. 한 번 생성되면 요소를 추가, 삭제, 변경할 수 없습니다.
소괄호 () 사용: 튜플은 소괄호를 사용하여 정의하며, 각 요소는 쉼표로 구분됩니다.
인덱싱 및 슬라이싱: 요소에 접근하기 위해 인덱스를 사용하며, 슬라이싱을 통해 요소들을 추출할 수 있습니다.
순서 존재(Ordered): 요소들의 순서가 유지되며, 인덱스를 통해 해당 요소에 접근할 수 있습니다.
불변성으로 인한 안정성: 데이터가 변경되지 않아야 하는 경우에 사용됩니다. 함수의 반환 값 등을 보호하기 위해 활용될 수 있습니다.
세트 (Set)
중복 불가: 세트는 중복 요소를 허용하지 않습니다. 중복된 요소는 자동으로 제거됩니다.
중괄호 {} 사용: 세트는 중괄호를 사용하여 정의되며, 각 요소는 쉼표로 구분됩니다.
순서 X(Unordered): 요소들의 순서가 고정되어 있지 않습니다. 따라서 인덱스를 사용하여 요소에 접근할 수 없습니다.
집합 연산 지원: 합집합, 교집합, 차집합 등의 집합 연산을 지원하여 데이터의 집합 관련 작업에 유용합니다.
딕셔너리 (Dictionary)
키-값 쌍: 딕셔너리는 키와 값의 쌍으로 데이터를 저장합니다. 각 키는 유일해야 하지만, 값은 중복될 수 있습니다.
중괄호 {} 및 콜론(:) 사용: 각 키-값 쌍은 콜론을 사용하여 정의되며, 쉼표로 구분됩니다.
키를 통한 검색: 키를 사용하여 값을 검색하고 가져올 수 있으며, 이를 통해 데이터를 매우 빠르게 접근할 수 있습니다.
가변적(Mutable): 딕셔너리는 변경 가능한 데이터 구조입니다.
(코드 예시)
# 리스트 정의 및 다양한 연산
a = [1, 2, 3]
print(a, type(a)) # [1, 2, 3] <class 'list'>
b = [10, a, 12.3, 'good', False]
print(b)
c = list()
print(c, type(c)) # [] <class 'list'>
# 리스트에 값 추가 및 삭제
family = ['준수', '예진', '정혜']
family.append('준호') # 추가
family.insert(0, '민규') # 삽입
family.extend(['tom', 'oscar'])
family += ['지원', '국인']
family.remove('tom') # 값에 의한 삭제
# family.clear() # 리스트 비우기
# 리스트 슬라이싱 및 중첩 리스트 다루기
aa = [1, 2, 3, ['a', 'b', 'kbs'], 4, 5] # 중첩 리스트
print(aa, aa[0], aa[0:3])
print(aa[3], ' ', aa[3][2])
aa.remove(2) # 값에 의한 삭제
del aa[3] # 순서에 의한 삭제
print(aa)
# 리스트 복사와 얕은 복사, 깊은 복사
bb = aa # 주소를 치환 : 같은 객체를 참조한 것, 얕은 복사
bb[0] = 'nice'
print(aa, ' ', bb)
import copy as c
cc = c.deepcopy(aa) # 주소를 치환 : 새로운 공간이 확보됨, 깊은 복사
print(aa, ' ', bb, ' ', id(aa), id(bb))
print(aa == cc, aa is cc) # 내용은 같지만 주소는 다름
cc[0] = '안녕'
print(aa, ' ', cc)
#-----------------------------------------------------------------------------
# 스택과 큐 (리스트로 구현)
sbs = [10, 20, 30]
sbs.append(40) # 스택 구조로 데이터 추가
print(sbs)
sbs.pop() # 스택 구조로 데이터 꺼내기 (LIFO 처리)
print(sbs)
sbs = [10, 20, 30]
sbs.append(40)
print(sbs)
sbs.pop(0) # 큐 구조로 데이터 꺼내기 (FIFO 처리)
print(sbs)
sbs.pop(0)
print(sbs)
#-----------------------------------------------------------------------------
# 튜플: list와 유사하나 읽기 전용(list보다 검색 처리 속도가 빠르다) - 순서0,수정x
t = 'a', 'b', 'c'
print(t, type(t), len(t)) # 출력: ('a', 'b', 'c') <class 'tuple'> 3
li = list(t)
li[0] = 'k'
t = tuple(li)
print(t, type(t)) # 출력: ('k', 'b', 'c') <class 'tuple'>
p = (1,) # 하나의 요소를 가지는 튜플 생성
print(p, type(p)) # 출력: (1,) <class 'tuple'>
#-----------------------------------------------------------------------------
# 세트 :순서X, 수정X, 중복불가
a = {1, 2, 3, 1, 2, 3}
print(a, type(a)) # 출력: {1, 2, 3} <class 'set'>
b = {3, 4}
print(a.union(b)) # 합집합 출력
print(a.intersection(b)) # 교집합 출력
print(a - b, a | b, a & b) # 차집합, 합집합, 교집합 출력
#-----------------------------------------------------------------------------
# 딕셔너리 : 키:값 의 형태로 쌍을 이룸. 순서가 없다. 키를 이용해 값을 조회.
mydic = dict(k1=1, k2='123', k3=3.4)
print(mydic, type(mydic)) # 출력: {'k1': 1, 'k2': '123', 'k3': 3.4} <class 'dict'>
dic = {'파이썬': '뱀', '자바': '커피', '스프링': '봄', '숫자': [1, 2, 3]}
print(dic, type(dic), len(dic))
print(dic['자바']) # key로 값을 참조하여 출력
dic['자바'] = '프로그래밍 언어' # 해당 키로 값을 수정
dic['오라클'] = '예언자' # 추가
del dic['오라클'] # 삭제
dic.pop('숫자') # 삭제
print(dic)
print(dic.keys())
print(dic.values())