-
[PYTHON] Dictionary와 Set, List와 TupleDEV/🐍 PYTHON 2021. 8. 9. 15:22
Set과 Dictionary, List와 Tuple 참 비슷하지만 다른 구석이 있는 데이터 타입이다.
우선 가장 기초적인 데이터 타입이 되는 list부터 보자
arsenal = ["Tierny", "Ben White", "Gabriel", "Bellerín", "Partey", "Xhaka", "Aubameyang", "Smith Rowe" , "Saka", "Lacazette"]
리스트로 정보표현이 이름밖에 되지 않는다. 이름을 기준으로 좀더 데이터를 넣고 싶을땐 어떻게 할까?
이때 필요한게 Dictionnary 이다.
아시다시피 Dictionnary 형식 { KEY값 : VALUE값 }
arsenal_tierney = { "실명" : "Kieren Tierney", "포지션" : "LB" }
이때 포지션를 추가할려면 직접 딕셔너리 값에 넣는 방법도 있지만
arsenal_tierney = { "실명" : "Kieren Tierney" }
arsenal_tierney["포지션"] = "LB"
1. Dictionary에서 요소(element) 읽어들이기
딕셔너리는 list 의 elementfmf 읽어 들이는 것과 비슷한데 차이점은 index값이 아니라 key 값으로 element를 호출한다.
arsenal_tierney = { "실명" : "Kieren Tierney"} arsenal_tierney[실명] > 'Kieren Tierney'
여기서 중요한게 key값은 중복되게 세팅하면 안된다는 것이다.
만일 이미 존재하는 key값이 또 추가되면 기존의 key값이 덮어쓰여지게 된다.
dict1 = { 1 : "one", 1 : "two" } print(dict1) > { 1: "two" }
2. 수정하기
my_dict = { "one": 1, 2: "two", 3 : "three" } my_dict["four"] = 4 print(my_dict) > {'one': 1, 2: 'two', 3: 'three', 'four': 4}
my_dict = { } my_dict[1] = "one" my_dict[2] = "two" > {1: 'one', 2: 'two'}
3. 삭제하기
key값과 value 값이 함께 지워진다.
my_dict = { "one": 1, 2: "two", 3 : "three" } del my_dict["one"] print(my_dict) > {2: 'two', 3: 'three'}
Dictionary와 Set의 차이
set(집합) : 수학에서의 집합 개념. 순서가 없고 집합안에서 unique값 mutable객체.
- 중괄호 사용은 딕셔너리와 비슷하지만 key값이 없는 것이 특징, 값만 존재한다
s = {3, 5, 7} type(s) > <class 'set'> s > {3 , 5, 7 }
- set(집합) 내부 원소는 다양한 값을 함께 가질 수 있지만, mutable(변하기쉬운)한 값은 가질수 없다.
- => list, set, dict 는 가질 수 없고 tuple값은 가질 수 있다
>>> s = {"1", 3, 5, (1,3)} >>> s {(1, 3), 5, 3, '1'} >>> s = {"1", 3, 5, [1,3]} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list' >>> s = {"1", 3, 5, {1,3}} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'set' >>> s = {"1", 3, 5, {1:1,3:3}} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'dict' >>> s = {"1", 3, 5, frozenset([1,3,4])} >>> s {5, 3, '1', frozenset({1, 3, 4})}
set 선언 : 단순히 중괄호 { } 로만 선언할 경우 dict로 인식 따라서
s = set( [1, 2, 3, 4, 5 ])
s = set([1,3,5,7]) > s > {1, 3, 5, 7} p = {1, 3, 5, 7} > p > {1, 3, 5, 7}
set 특징 : 중복값 제거, 순서가 없음
s = {1, 5, 1, 1, 1, 3, 7} s > {1, 3, 5, 7}
for i in {1, 2, 4, 8, 16,32}: print(i) >32 >1 >2 >4 >8 >16
set(집합)의 in
r = {1, 2, 4, 6, 8} 2 in r >True 3 in r >False 3 not in r >True
set(집합) : 원소추가 /update/ 원소제거 /복사 메소드
1. add (원소추가)
k = {100, 105} k.add(50) k >{105, 50, 100}
2. update( [element] ) :
딕셔너리에서 여러값을 수정 또는 추가하는데 사용
but set은 중복은 자동으로 제거되고 수정이라는 개념보다 여러데이터를 한번에 추가할때 사용.
k = {1, 2, 3} k.update([3, 4, 5]) k >{1, 2, 3, 4, 5}
3. remove(item)
k = {1, 2, 3} k.remove(3) k {1, 2}
4. copy()
s = {1, 3, 5} t = s.copy() s >{1, 3, 5} t >{1, 3, 5} #set값이기에 순서가 없다. id(s) >4334668264 id(t) >4334666696
특히 set집합에서의 연산자가 중요하다.
합집합 |
교집합 &
차집합 -
대칭차집합 (합집합 - 교집합)
연산 메소드 :
합집합 union
교집합 intersection
차집합 difference
대칭차집합 symmetric_difference
set(집합) : 기타 메소드 (부분집합확인,
issubset : 부분집합 여부 확인
>>> a = {1, 2, 3, 4, 5} >>> b = {1, 2, 3} >>> a.issubset(b) False >>> b.issubset(a) True
issuperset : issubset과 반대 superset인지 확인
>>> a = {1, 2, 3, 4, 5} >>> b = {1, 2, 3} >>> a.issuperset(b) True >>> b.issuperset(a) False
isdisjoint : 교집합이 없으면 True, 있으면 False
>>> a = {1, 2, 3} >>> b = {4, 5, 6} >>> a.isdisjoint(b) True >>> c = {1, 2, 3} >>> d = {3, 4, 5} >>> c.isdisjoint(d) False
List 와 Tuple 의 차이
list 는 값을 변경할 수 있지만 tuple은 값을 변경할 수 없다.
좌표나 위치정보등 변하지 말아야할 정보는 튜플값으로 저장하는 것이 좋다. 리스트에 비해 튜플이 더 적은 메모리를 소모하고 처리 속도도 빠르다는 장점이 있다.
tuple 선언시 주의해야할 점!
1. 튜플이 1개의 데이터를 가질때 뒤에 꼭 ,를 붙여 튜플임을 상기시켜야 한다.
2. 튜플의 요소값 수정은 안된다. 삭제,정렬, 추가 모두 안된다.
3. 만약 튜플값을 수정하고 싶다면 ? 리스트로 변환한뒤 수정하자. list ( (set) )
4. 만약 튜플에 포함된 요소 개수가 궁금하다면: count( )
5. 다시 튜플로 바뀌고 싶다면 tuple ( ( list ) )
'코딩 > 🐍 PYTHON' 카테고리의 다른 글
[PYTHON] Class (0) 2021.08.10 [PYTHON] 위치인수와 가변인수, 키워드 가변인수 (0) 2021.08.09 [PYTHON] Function Parameters (0) 2021.08.09 [PYTHON] Source Lake (0) 2021.08.06 [PYTHON] 가변객체와 불변객체는 무슨 말일까? (0) 2021.07.07