앎을 경계하기

Programming/Python

Python tuple, dictionary, set

양갱맨 2019. 12. 25. 23:07

Python 리스트, 튜플, 딕셔너리, 셋

  • list = []
  • tuple = ()
  • dict = {}
  • set = set()

Tuple은 리스트와 비슷하지만 값의 수정이 불가능하다는 차이점이 있다.

t1 = ()
t1[0] = 1
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-1-09a62d860d97> in <module>
      1 t1 = ()
----> 2 t1[0] = 1


TypeError: 'tuple' object does not support item assignment

 

t1 = (1,2,3)
t1[0] # list와 같이 인덱스로 접근 가능하다.
1

 

#괄호를 생략해도 튜플 사용할 수 있다.
t1 = 1,2,3
type(t1)
tuple

튜플 연산

t2 = (3,4)
t1 + t2
(1, 2, 3, 3, 4)

 

t2 * 3
(3, 4, 3, 4, 3, 4)

딕셔너리

딕셔너리는 key, value를 한 쌍으로 갖는다.

key를 통해 value를 얻을 수 있다.

dic = {'name':'pey', 'phone':'01012341234', 'birth':'1225'}
dic
{'name': 'pey', 'phone': '01012341234', 'birth': '1225'}

 

dic['name']
'pey'

 

dic[0] # 인덱스로는 접근할 수 없음
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-12-ed051a670563> in <module>
----> 1 dic[0] # 인덱스로는 접근할 수 없음


KeyError: 0

 

dic.keys() # 딕셔너리의 키를 모아서 객체로 반환
dict_keys(['name', 'phone', 'birth'])

 

dic.values() # 딕셔너리의 밸류를 모아서 객체로 반환
dict_values(['pey', '01012341234', '1225'])

 

a = {'a': [1,2,3]} # value로 리스트를 넣을 수도 있다.
a['a']
[1, 2, 3]

 

del a['a'] # key로 접근해서 요소 삭제 가능
a
{}

 

a = {1.23: '1.23'}
a[1.23] # key로 실수도 사용가능
'1.23'

 

a = {[1,2,3] : [1,2,3]}
a[[1,2,3]] # key로 리스트는 사용불가
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-32-4fa9150e6945> in <module>
----> 1 a = {[1,2,3] : [1,2,3]}
      2 a[[1,2,3]] # key로 리스트는 사용불가


TypeError: unhashable type: 'list'

 

a = {1 : 'a', 1 : 'b'}
a[1] # 마지막 값으로 덮어씌워진다.
'b'

 

a = {'name': 'pey', 'phone':'01012341234', 'birth':'1225'}
a
{'name': 'pey', 'phone': '01012341234', 'birth': '1225'}

 

lista = list(a.keys()) # key를 모은 객체를 list로 변환
lista[0]
'name'

 

a.items() # key, value 쌍 얻기
dict_items([('name', 'pey'), ('phone', '01012341234'), ('birth', '1225')])

 

a.clear() # 딕셔너리 비우기
a
{}

 

a = {'name': 'pey', 'phone':'01012341234', 'birth':'1225'}
a.get('name') # a['name']과 같지만 없는 key를 사용하면 반환하는 것이 다르다.
'pey'

 

a.get('age') # None 리턴
a['age'] # error 발생
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-48-263173bfb7d5> in <module>
----> 1 a['age'] # error 발생


KeyError: 'age'

Set

집합의 특징

  • 중복을 허용하지 않는다.
  • 순서가 없다.
s = set('hello')
s
{'e', 'h', 'l', 'o'}

 

s[0] # 순서가 없기 때문에 인덱스로 접근이 불가능함
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-52-5a22868400f3> in <module>
----> 1 s[0] # 순서가 없기 때문에 인덱스로 접근이 불가능함


TypeError: 'set' object is not subscriptable

 

s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])

# 교집합
print(s1&s2)
print(s1.intersection(s2))

# 합집합
print(s1|s2)
print(s1.union(s2))

# 차집합
print(s1-s2)
print(s1.difference(s2))
{4, 5, 6}
{4, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3}
{1, 2, 3}

 

s1 = set([1,2,3])
s1.add(4) # 4 추가
s1
{1, 2, 3, 4}

 

s1.update([3,4,5]) # 여러개 추가
s1
{1, 2, 3, 4, 5}

 

#add로는 여러개 값을 넣을 수 없다.
s1.add([3,4,5,6])
s1.add(3,4,5,6)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-63-cc24378f46de> in <module>
      1 #add로는 여러개 값을 넣을 수 없다.
----> 2 s1.add([3,4,5,6])
      3 s1.add(3,4,5,6)


TypeError: unhashable type: 'list'

 

s1.remove(2) # 2 제거
s1
{1, 3, 4, 5}

참고 도서 : Do It! 점프 투 파이썬