[Python] Python 자료형(2)
1. list
변경 가능한 자료형으로, 다양한 데이터 타입의 항목 포함 가능
- 다양한 자료형을 갖는 item 을 보관하는 자료구조
- 🚨 리스트 안에는 어떠한 자료형도 포함할 수 있다.
1.1 리스트 생성
a=[]
print(a) # []
b=[1,2,3]
print(b) # [1, 2, 3]
c=["Life","is","too","short"]
print(c) # ['Life', 'is', 'too', 'short']
d=[1,2,"Life","is"]
print(d) # [1, 2, 'Life', 'is']
e=[1,2,["Life","is"]]
print(e) # [1, 2, ['Life', 'is']]
1.2 리스트 인덱싱
문자열 사용법과 동일
a=[1,2,3]
print(a[0]) # 1
print(a[-1]) # 3
b= a[0]+a[2]
print(b) # 4
a=[1,2,3,["a","b","c"]]
b=a[3]
print(b) # ['a', 'b', 'c']
b=a[-1]
print(b) # ['a', 'b', 'c']
b=a[-1][0]
print(b) # a
b=a[-1][1]
print(b) # b
b=a[-1][2]
print(b) # c
1.3 리스트 슬라이싱
문자열 사용법과 동일
a=[1,2,3,4,5]
print(a[0:2]) # [1, 2]
print(a[:2]) # [1, 2]
print(a[2:]) # [3, 4, 5]
a=[1,2,3,["a","b","c"],4,5]
print(a[2:5]) # [3, ['a', 'b', 'c'], 4]
print(a[3][:2]) # ['a', 'b']
1.4 리스트 연산하기
a=[1,2,3]
b=[4,5,6]
# 더하기
print(a+b) # [1, 2, 3, 4, 5, 6]
# 곱하기
print(a*3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
# 길이 구하기
print(len(a)) # 3
1.5 리스트의 수정과 삭제
# item 수정하기
a=[1,2,3]
a[2]=4
print(a) # [1, 2, 4]
# item 삭제하기(del 함수 이용)
a=[1,2,3]
del a[1]
print(a) # [1, 3]
a=[1,2,3,4,5]
del a[2:]
print(a) # [1,2]
1.6 리스트 관련 함수
⚠️ pop은 인덱스를 기준으로, remove는 요소로 item을 제거할 수 있다.
# item 제거 - remove
# ! 여러 개 있으면, 첫 번째 item만 제거
# * 인덱스 값이 아닌 요소 값으로 판단
a=[1,2,3,1,2,3]
a.remove(3)
print(a) # [1, 2, 1, 2, 3]
# 특정 위치의 item 빼내기 - pop
a=[1,2,3]
a.pop() # 마지막 요소를 삭제
print(a) # [1, 2]
a=[1,2,3]
a.pop(1)
print(a) # [1, 3]
a=[1,2,3]
a.pop(0) # 첫 번째 요소를 삭제
print(a) # [2, 3]
⚠️
append()
는 하나의 인자만 받을 수 있다. 여러 개의 인자를 받고 싶으면extend()
를 사용해야 한다.
# item 추가하기 - append
a=[1,2,3]
a.append(4)
print(a) # [1, 2, 3, 4]
a.append([5,6])
print(a) # [1, 2, 3, 4, [5, 6]]
# 정렬 - sort
# * 유니코드 기반 정렬
a=["a","c","b"]
a.sort()
print(a) # ['a', 'b', 'c']
a=[1,4,3,2]
a.sort()
print(a) # [1, 2, 3, 4]
# 순서 뒤집기 - reverse
# ! reverse은 정렬과 무관하다.
a=["a","c","b"]
a.reverse()
print(a) # ['b', 'c', 'a']
# 인덱스 반환 - index
a=[1,2,3]
print(a.index(3)) # 2
print(a.index(1)) # 0
# print(a.index(6)) # ! index에 값이 존재하지 않으면 error
# 특정 위치에 item 삽입 - insert
a=[1,2,3]
a.insert(0,4) # 리스트의 0번째 위치에 4를 삽입
print(a) # [4, 1, 2, 3]
a=[4, 1, 2, 3]
a.insert(3,5)
print(a) # [4, 1, 2, 5, 3]
# 특정한 item 개수 세기 - count
a=[1,2,3,1]
print(a.count(1)) # 2
print(a.count(2)) # 1
# 확장 - extend
# ! 함수의 인자는 리스트만 가능 --> 교재가 틀림 tuple, dict도 들어가긴 함
a=[1,2,3]
a.extend((4,5))
print(a) # [1, 2, 3, 4, 5]
b=[6,7]
a.extend(b)
print(a) # [1, 2, 3, 4, 5, 6, 7]
2. tuple
⭐ 리스트는 item의 생성, 삭제, 수정이 가능하지만, 튜플은 불변하기 때문에 item을 변경할 수 없다 -> 불변성(immutable)
- 리스트와 유사하지만, 튜플은
()
, 리스트는[]
- 리스트와 달리 t2=(1,) 처럼 단지 1개의 요소만을 가질 떄는 요소 뒤에 쉼표(,)를 반드시 붙여야 한다.
- t4=1,2,3 처럼 소괄호(())를 생략해도 된다.
# TODO: 튜플의 생성
t1 = ()
print(t1) # 출력: ()
t2 = (1,)
print(t2) # 출력: (1,) -> 튜플의 요소가 하나일 때는 뒤에 콤마를 붙여줘야 튜플로 인식됨
t3 = (1, 2, 3)
print(t3) # 출력: (1, 2, 3)
t4 = 1, 2, 3 # 소괄호 생략 가능
print(t4) # 출력: (1, 2, 3)
t5 = t1 = (1, 2, "a", "b")
print(t5) # 출력: (1, 2, 'a', 'b') -> t1에 튜플이 할당되고, t5도 동일한 튜플을 참조함
t6 = ("a", "b", ("ab", "cd"))
print(t6) # 출력: ('a', 'b', ('ab', 'cd')) -> 튜플 안에 또 다른 튜플이 포함됨
# ! 튜플은 불변하기 때문에 아래 코드는 오류 발생
# del t1[0]
# t1[0]="c"
# TODO: 튜플 인덱싱
t1=(1,2,"a","b")
print(t1[0]) # 1
print(t1[3]) # b
# TODO: 튜플 슬라이싱
t1=(1,2,"a","b")
print(t1[1:]) # (2, 'a', 'b')
# TODO: 튜플 더하기
t1=(1,2,"a","b")
t2=(3,4)
t3=t1+t2
print(t3) # (1, 2, 'a', 'b', 3, 4)
# TODO: 튜플 곱하기
t2=(3,4)
t3=t2*3
print(t3) # (3, 4, 3, 4, 3, 4)
# TODO: 튜플 길이 구하기
print(len(t1)) # 4
3. dictionary
Key와 Value를 한 쌍으로 가지는 자료형
- 리스트나 튜플처럼 순차적으로 해당 item을 구하지 않고 Key를 통해 Value를 획득
- key가 중복으로 존재할 수 없다.
3.1 딕셔너리 생성
# 딕셔너리의 생성
a={"name":"pey","phone":"010-1234-5678","birth":"1118"}
b={1:"hi"}
c={"a":[1,2,3]}
print(a) # {'name': 'pey', 'phone': '010-1234-5678', 'birth': '1118'}
print(b) # {1: 'hi'}
print(c) # {'a': [1, 2, 3]
3.2 item 추가 및 삭제
⚠️ 딕셔너리에서
a[2] = "b"
라고 할 때,2
는 인덱스가 아니라 “키(key)”이다.
# TODO: item(pair) 추가하기
a={1:"a"}
a[2]="b"
print(a) # {1: 'a', 2: 'b'}
a["name"]="pey"
print(a) # {1: 'a', 2: 'b', 'name': 'pey'}
a[3]=[1,2,3]
print(a) # {1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}
# TODO: item(pair) 삭제하기
a={1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}
del a[1] # 딕셔너리에서 del 함수는 키 제거
print(a) # {2: 'b', 'name': 'pey', 3: [1, 2, 3]}
3.3 key를 이용하여 Value 구하기
🚨 key는 immutable 한 것만 가능 -> 따라서, 튜플은 key로 가능하나 리스트는 불가능하다.⭐⭐
딕셔너리의 key 사용 여부는 key가 immutable 여부에 따라 다르다.
grade={"pey":10,"julliet":99}
a=grade["pey"]
b=grade["julliet"]
print(a) # 10
print(b) # 99
a={1:"a",2:"b"}
print(a[1]) # a
print(a[2]) # b
a={"a":1,"b":2}
print(a["a"]) # 1
print(a["b"]) # 2
# 튜플을 key로 사용
a={("a",):1,("b",):2}
b=a[("a",)]
c=a[("b",)]
print(b) # 1
🚨 중복되는 key를 사용하면 기존의 것은 무시되고 새로운 key:value로 설정된다.
# ! 중복되는 key를 사용하면 기존의 것은 무시되고 새로운 key:value로 설정된다.
a={1:"a",1:"b"}
print(a) # {1: 'b'}
# ! a가 정의되지 않은 상태에서 사용되어 오류 발생
# a={1:"a",a:"b"}
# print(a)
# ! 리스트는 key를 사용할 수 없으므로 오류 발생
# a={[1,2]:"hi"}
# print(a)
3.4 딕셔너리 관련 함수(1) - keys
⚠️
a.keys()
로 얻은 키들을for
문에서 묶으면 리스트로 나온다. (키만 따로 반환하므로 튜플로 묶어줄 필요가 없다.)
# key 리스트 만들기 - keys
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
print(a.keys()) # dict_keys(['name', 'phone', 'birth'])
b=list(a.keys())
print(b) # ['name', 'phone', 'birth']
# * 기억할 사항
for k in a.keys():
print(k)
# name
# phone
# birth
3.5 딕셔너리 관련 함수(2) - values, get
# value 리스트 만들기 - values
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
print(a.values()) # dict_values(['pey', '010-1234-5678', '1118'])
b=list(a.values())
print(b) # ['pey', '010-1234-5678', '1118']
# key로 value 구하기 - get
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
b=a.get("name")
print(b) # pey
b=a["name"]
print(b) # pey
b=a.get("nokey")
print(b) # None, 에러는 나지 않음
# ! 딕셔너리 a에 "nokey"라는 키가 존재하지 않기 때문에 오류 발생
# b=a["nokey"]
# print(b)
# ! 따라서 아래와 같이 변경해줘야함.
b=a.get("nokey","foo") # key가 없는 경우, "foo" 반환
print(b) # foo
3.6 딕셔너리 관련 함수(2) - items, clear
a.items()
는 각 **키-값 쌍이 튜플로 묶여서 전체가 리스트 형태로 반환된다.
튜플은 불변 자료형이기 때문에 각 키-값 쌍이 pair가 되도록 안전하게 묶어주는 역할을 한다.
# item 구하기 - items (Key, Value pair 구하기)
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
print(a.items()) # dict_items([('name', 'pey'), ('phone', '010-1234-5678'), ('birth', '1118')])
b=list(a.items())
print(b) # [('name', 'pey'), ('phone', '010-1234-5678'), ('birth', '1118')]
# item 지우기 - clear (Key, Value pair 지우기)
a={"name":"pey", "phone":"010-1234-5678", "birth":"1118"}
a.clear()
print(a) # {}
3.7 딕셔너리 관련 함수(2) - in
# key 존재 여부 조사 - in
b="name" in a
print(b) # True
b="email" in a
print(b) # False
4. set
🚨 중복 불가. 순서가 없다. (리스트, 튜플은 순서가 있음)
- set은 중복을 허용하지 않는 특징 때문에 데이터의 중복을 제거하기 위한 필터로 종종 사용
- 만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한 후에 해야 한다.
4.1 set 생성
s1=set([1,2,3])
print(s1) # {1, 2, 3}
s2=set("Hello")
print(s2) # {'l', 'e', 'o', 'H'}
4.2 set 인덱싱과 슬라이싱
🚨
set
은 순서가 없는 자료형이기 때문에 인덱싱과 슬라이싱이 불가능하다!
따라서list
나tuple
로 변환한 후 인덱싱과 슬라이싱을 수행해야 한다.
s1=set([1,2,3])
t1=list(s1)
print(t1) # [1, 2, 3]
print(t1[0]) # 1
t1=tuple(s1)
print(t1) # (1, 2, 3)
print(t1[0]) # 1
4.3 교집합, 합집합, 차집합
# 교집합
s1=set([1,2,3,4,5,6])
s2=set([4,5,6,7,8,9])
a=s1 & s2
print(a) # {4, 5, 6}
a=s1.intersection(s2)
print(a) # {4, 5, 6}
# 합집합
s1=set([1,2,3,4,5,6])
s2=set([4,5,6,7,8,9])
a=s1 | s2
print(a) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
a=s1.union(s2)
print(a) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
# 차집합
a=s1-s2
print(a) # {1, 2, 3}
a=s1.difference(s2)
print(a) # {1, 2, 3}
a=s2-s1
print(a) # {8, 9, 7}
a=s2.difference(s1)
print(a) # {8, 9, 7}
4.4 set 관련 함수
# TODO: 집합 자료형 관련 함수
# item 1개 추가 - add
s1=set([1,2,3])
s1.add(4)
print(s1) # {1, 2, 3, 4}
# item 여러 개 추가 - update
s1=set([1,2,3])
s1.update([4,5,6])
print(s1) # {1, 2, 3, 4, 5, 6}
# item 제거 - remove
s1=set([1,2,3])
s1.remove(2)
print(s1) # {1, 3, 4, 5, 6}
댓글남기기