기본적인 튜플의 모습
tp=()
tp2=(1)
print(type(tp2))
tp2=(1,)
print(type(tp2))
tp3=(1,2,3)
tp4=(1,2,3,'a',('bc','de'))
tp5=1,2,3
print(type(tp5))
리스트와 비슷한 형태이지만 [] 대괄호로 둘러싸지만 듀플은 () 소괄호로 둘러싸입니다.
리스트는 값을 생성, 삭제, 수정이 가능하지만 튜플은 값을 바꿀 수 없다는 것이 가장 큰 차이점입니다!
또한 위 코드에서 tp2에서 (1) 일 때와 (1,) 일 때의 차이점을 확인해보세요!
(1) 일 때는 int형이고, (1,) 일 때는 tuple인 것을 확인하실 수 있습니다.
즉 튜플은 단 1개의 요소를 가질 때는 요소 뒤에 반드시 콤마(,)를 붙여야 합니다.
tp5 같이 () 소괄호를 생략해도 tp5가 튜플인 것을 확인해보세요!
위에서 튜플은 값을 바꿀 수 없다고 했는데 한번 실습을 해서 결과를 확인해보겠습니다!
tp1=(1,2,3)
tp1[0]='a'
#Traceback (most recent call last):
# File "retry.py", line 2, in <module>
# tp1[0]='a'
#TypeError: 'tuple' object does not support item assignment
1,2,3으로 구성된 tp1 튜플 객체를 생성하고 tp1의 0번째 요소를 'a'로 바꾸려는 코드입니다.
직접 실행을 해보시면 주석 처리한 에러가 발생할 것입니다!
튜플 사용
튜플과 리스트의 차이점은 값을 바꿀 수 없다는 것 빼고는 사용법이 동일하여 간단하게만 사용해보겠습니다.
tp1=('a','b',1,2,3)
print(tp1[0])
print(tp1[0:3])
tp2=('가','나')
print(tp1+tp2)
print(tp1*2)
print(len(tp1))
# tp1[0] : tp1객체(튜플)의 0번째 요소
# tp1[0:3] : tp1객체(튜플)의 0번째부터 2번째 요소까지
# tp1+tp2 : tp1객체(튜플)와 tp2객체(튜플) 요소 합치기
# tp1*2 : tp1객체(튜플)의 요소를 2번 반복 => *2는 곱하기 2와 동일한 의미입니다.
# len(tp1) : tp1객체(튜플)의 길이
Quiz) tp3객체에 tp1객체(튜플)와 tp2객체(튜플)를 합친 후 1,2,3,'가' 를 출력해보세요!
정답:
tp3=tp1+tp2
print(tp3[2:6])
딕셔너리
딕셔너리의 가장 큰 특징은 Key, Value로 구성되어 있다는 것입니다.
ex) 1(Key): 홍길동(Value) | 2(Key):이순신(Value) | 3(Key):유관순(Value)
dic1={1:'홍길동',2:'이순신',3:'유관순'}
dic2={'과일':['사과','배','귤'],'동물':['강아지','고양이']}
print(dic1[2])
print(dic2['과일'])
# print(dic1[2]) : dic1객체(딕셔너리)에서 Key가 2인 Value를 출력 = 이순신
# print(dic2['과일']) : dic2객체(딕셔너리)에서 Key가 '과일'인 Value를 출력 = ['사과', '배', '귤']
딕셔너리 쌍 추가, 삭제
# 추가
dic1={1:'one'}
dic1[2]='two'
print(dic1)
dic1[3]=['three','four']
print(dic1)
# 삭제
del dic1[2]
print(dic1)
딕셔너리 쌍 삭제 방법 : del 객체[요소]
★주의!
딕셔너리의 Key는 변하는 값을 사용할 수 없습니다.
따라서 딕셔너리의 Key에는 리스트를 사용할 수 없습니다. 밑에서 공부하겠지만 딕셔너리도 변하기 때문에 딕셔너리도 Key로 사용할 수 없습니다.
+ 튜플은 변하지 않기 때문에 Key로 사용이 가능합니다.
dic1={[1]:'one'}
#Traceback (most recent call last):
# File "retry.py", line 11, in <module>
# dic1={[1]:'one'}
#TypeError: unhashable type: 'list'
dic1={{1:'one'}:'일'}
#Traceback (most recent call last):
# File "retry.py", line 11, in <module>
# dic1={{1:'one'}:'일'}
#TypeError: unhashable type: 'dict'
dic1={(1,):'one'}
print(dic1[(1,)])
위 코드를 직접 실행해보세요!
★주의 2!
# Ex1
dic1={1:'one',1:'two'}
print(dic1)
# Ex2
dic1={1:'one',2:'two',3:'four'}
dic1[1]='하나'
print(dic1)
dic1={1:'one',1:'two'} : 초기에 동일한 Key 2개를 생성하면 하나는 무시됩니다.
Ex2에서 1:'one'이 존재하는 상태이고 dic1[1]='하나' 를 입력하면 Key 1의 Value는 '하나'로 변하게 됩니다.
딕셔너리 함수
Key 값 가져오기
dic1={1:'one',2:'two',3:'four'}
print(dic1.keys())
for key in dic1.keys():
print(key)
Value 값 가져오기
dic1={1:'one',2:'two',3:'four'}
print(dic1.values())
for value in dic1.values():
print(value)
Key, Value 쌍 가져오기
dic1={1:'one',2:'two',3:'four'}
print(dic1.items())
for key,value in dic1.items():
print(key," : ",value)
딕셔너리 모든 요소 삭제
dic1={1:'one',2:'two',3:'four'}
dic1.clear()
print(dic1)
Key로 Value값 얻기
dic1={1:'one',2:'two',3:'four'}
print(dic1.get(2))
print(dic1.get('five'))
print(dic1[2])를 했을 때와 print(dic1.get(2))를 했을 때의 결과는 동일합니다.
하지만 print(dic1['five'])는 에러가 발생하지만 print(dic1.get('five'))는 None을 출력하게 됩니다!
차이점: get은 없는 Key값을 찾을 때 None을 return 합니다.
+ 딕셔너리에 Key가 존재하는지 확인
dic1={1:'one',2:'two',3:'four'}
print(1 in dic1)
print(5 in dic1)