[Python] 점프 투 파이썬 - 딕셔너리 자료형, 집합 자료형, 불 자료형, 변수
본문 바로가기
Python/기초 다지기

[Python] 점프 투 파이썬 - 딕셔너리 자료형, 집합 자료형, 불 자료형, 변수

by 쏠수있어ㅤ 2021. 5. 29.
반응형

1. 딕셔너리 자료형 == 사전 자료형 

 a = {1:'a', 2:'b', 3:'c'}   (JS 의 객체 형태와 비슷하다.) 

여기서 속성인 1,2,3 = Key, 'a', 'b', 'c'는 = Value 가 된다. key와 value , 쌍으로 데이터를 저장 

딕셔너리 자료형은 아래서 공부할 집합 자료형처럼 순서가 없기 때문에 index, 인덱싱 불가이다. 

 

비어있는 딕셔너리는 

a = dict() 으로 생성 

 

* 딕셔너리의 key는 고유한 unique 값이다. 

똑같은 key 값들이 있으면 가장 마지막것만 유효, 나머지는 무시된다. 

Key에는 List를 쓸 수 없다. (나머지 튜플, 숫자, 문자열 등 가능) 

해시테이블 (Hash Table)을 이용하므로 (key 혹은 집합의 원소Element를 이용하여) 데이터의 조회, 수정에 있어 O(1)의 시간에 처리하는 장점 

 

딕셔너리 쌍 추가 / 삭제 / key이용해 value 얻기 / 여러개 키값 존재할 때 마지막 key값 빼고 무시됨 

# 딕셔너리 쌍 추가하기
a = {1:'a'}
a[2]='b'
print(a)

a['name']='John'
print(a)
a[3]=[1,2,3]
print(a)

a[4]=(1,2,3)
print(a)
a[5]=10,20
print(a)

#딕셔너리 쌍 삭제하기
del a['name']
print(a)
del a[3]
print(a)

#Key 이용해 Value 얻기
print(a[1])
print(a[4])

#중복 key값 의 경우
a= {1:'a', 2:'Hello', 1:'c', 2:'good'}
print(a[1])
print(a[2])

 

 

 

 

 

 

 

 

 

 

 

 

Key값 , Values , 둘 다 가져오기, .items(), key값으로 value 없기, .clear() 딕셔너리 초기화 

a = {'name':'Tasha', 'age':30, 'hobby':['piano', 'football']}
#Key 값 가져오기 
print(a.keys())
print(list(a.keys()))

#values 만 가져오기
print(a.values())
print(list(a.values()))

#key, values 둘 다 가져오기
print(a.items())
print(list(a.items()))

#key값으로 value 얻기 = a[0] , a[1]과 같음
print(a.get('name'))
print(a.get('hobby'))
print(a.get('hello'))
print(a.get('hello', 'haha'))

print('name' in a)
print('Hello' in a)

a.clear()
print(a)

#빈 딕셔너리 생성 
b= dict()
print(b)



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.pop('key-name') 으로 해당 value를 꺼내오고 return, 그리고 해당 key,value를 빼낸다. 

a = {'a':9, 'b':30, 'c':50}
result = a.pop('b')
print(result)
print(a)

 

 

 

 

 

 

 

 

data = dict()
data['사과']='Apple'
data['바나나']='Banana'
data['코코넛']='Coconut'

print(data)

if '사과' in data:
  print(data['사과'])


key = data.keys()
value = data.values()
print(key)
print(value)

for i in key:
  print(i)
  print(data[i])

 

 

 

 

 

 

 

 

 

 


 

 

 

 

2. 집합 자료형

파이썬 2.3부터 지원함

집합에 관련된 것을 쉽게 처리하기위해 만든 자료형 

* 중복을 허용하지않음, 순서가 없음 -> 딕셔너리처럼 인덱싱 불가.  하려면 튜플 or 리스트로 변환해서 인덱싱 진행 

빈 집합 자료형 만들기 s = set()  / s = ({ }) / s = set([  ]) / set ((  )) 

 

어떤 요소가 집합 안에 있는지 없는지 그 여부만을 다룰 때 효과적임. 

 

집합 자료형 연습, list, tuple로 만들어 요소에 접근하기, 교집합, 합집합, 차집합 구하기 

 

 

 

#질서가 없다 / 중복이 없다. 
a = set("hello")
print(a)

a = set([1,2,3])
print(a)
a = set((3,3,5))
print(a)

#list, tuple로 바꿔 요소에 접근하기
b = list(a)
print(b)
print(b[0])

c = tuple(a)
print(c)
print(c[0])

#tuple 연습
print(tuple(a))
a = 'asdf'
print(tuple(a))

#집합 자료형 교집합 구하기 
a = set([1,2,3,4,5,6])
b = set([4,5,6,7,8,9])

print(a&b)
print(a.intersection(b))

#집합 자료형 합집합 구하기 
print(a | b)
print(a.union(b))

#집합 자료형 차집합 구하기 
print(a-b)
print(b-a)

 

 

 

 

 

 

 

 

 

 

 

집합 자료형 관련 함수

집합 자료형에 값 1개 추가 / 여러개 추가 / 특정값 제거 

a = set([1,2,3])
a.add(4)
print(a)

a.update([5,6,7])
print(a)

a.remove(1)
print(a)

# 오류 남. remove의 인자값 1개만 가능 
a.remove(5,6,7)
print(a)

 

 

 

 

 

 

 

 

 

 

 

 

집합 자료형 요소 1개 추가하기 / 여러개 추가하기  / 특정 값 제거하기 

a = set([1,2,3])
a.add(4)
print(a)

a.update((5,6,7))
print(a)

a.remove(1)
print(a)

# 오류 남. remove의 인자값 1개만 가능 
#a.remove(5,6,7)
print(a)

a = [1,2,3]
a.remove(3)
print(a)

 

 

 

 

 

 

 

 

 

 

 

 

 

연습

#집합 자료형 초기화 방법 
a = set([0,1,2,3,3,3,2,1,2])
print(a)

b = {1,2,3,3,2,1,3,3,2,4}
print(b)

c = ({1,2,3,3,3,3})
print(c)

#교집합 and
print(a&b)
print(a.intersection(b))

#합집합 or
print(a | b)
print(a.union(b))

#차집합
print(a-b) #0
print(b-a) #4

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 불 자료형 

Bool 자료형은 참 True, 거짓 False 를 나타내는 자료형 (둘 중 하나) 

a= [1,2,3,4]
while a:  #a 가 참일동안 = a가 !=[] 동안 
  print(a.pop())

if []:
  print('참')
else:
  print('거짓')

#bool 내장객체 
print(bool('dd'))
print(bool(123))
print(bool([]))
print(bool(0))
print(bool(None))
print(bool())
print(bool(''))

 

 

 

 

 

 

 

 

 

 

 

 

 

4. 자료형의 값을 저장하는 공간, 변수 

a = 1  (any 객체)

여기서 1이라는 값을 담는 곳 a 가 변수이다. 

메모리에 a에 담긴 값을 가지는 주소가 자동 생성된다. 

여기서 생성되는 메모리 주소가 같은지 다른지에 따라 해당 변수의 일치 여부가 나온다. 

ex) 

#객체가 담긴 변수의 메모리 주소
a = 1
b = (1,2)
c = {1,2}
d = [1,2]

print(id(a))
print(id(b))
print(id(c))
print(id(d))

print(1==1)
print(a is b)

#변수의 일치 여부
a = [1,2,3]
b = [1,2,3]
print(id(a)) # 다르다
print(id(b)) # 다름. 

 

 

 

 

 

 

 

 

 

 

헷갈리는 변수 

a = 1
b = 1
print(id(a))
print(id(b))
print(a==b)
print(a is b)

a=(1,2,3)
b=(1,2,3)
print(id(a))
print(id(b))
print(a==b)
print(a is b)

a = [1,2,3]
b = [1,2,3]
print(id(a))
print(id(b))
print(a==b)
print(a is b)

a={1,2,3}
b={1,2,3}
print(id(a))
print(id(b))
print(a==b)
print(a is b)

Number 숫자형,  Tuple 튜플 자료형은 다른 변수에 같은 값을 넣으면 메모리 저장 공간이 같다. 

List 리스트와 집합 자료형은 같은 값을 다른 변수에 각각 넣어도 메모리 저장 공간이 다르다. 

a==b 의 값은 모두 (변수의 값은 같기 때문에) True,

a is b 의 값은 메모리 저장 주소에 따라 결정 -> LIst, 집합 자료형은 False 가 나온다. (주소가 다르기 때문) 

 

 

 

 

 

 

 

 

 

 

 

헷갈리는 LIST 리스트의 변수 

같은 메모리 주소를 공유하는 경우 - 하나의 변수 값을 바꿔도 해당 메모리 주소에 연결된 변수의 값도 함께 바뀐다.

a = [1,2,3]
b = a

print(id(a))
print(id(b))
print(a is b)

a[2] = 10
print(a)
print(b)

b[0] = 0
print(a)
print(b)

 

 

 

 

 

 

 

 

 

 

b가 a와 같은 값을 가져오면서 a와는 다른 메모리 주소를 가지는 2가지 방법

1. a[:] 전체 슬라이싱으로 복사 -> 메모리의 주소가 달라지고 각각 변수의 변화가 생김

a = [1,2,3]
b = a[:]

print(id(a))
print(id(b))
print(a==b)
print(a is b)

a[2] = 10
print(a)
print(b)

b[0] = 0
print(a)
print(b)



 

 

 

 

 

 

 

 

 

 

 

2. copy 모듈 사용

from copy import copy
a = [1,2,3]
b = copy(a)

print(id(a))
print(id(b))
print(a==b)
print(a is b)

a[2] = 10
print(a)
print(b)

b[0] = 0
print(a)
print(b)

 

 

 

 

 

 

 

 

 

 

 

 

변수를 만드는 여러가지 방법

#튜플은 () 괄호가 optional 이다. 
a,b = 'python','is good'
print(a)
print(b)
(a,b)='python','is good'
print(a)
print(b)
a,b = ('python', 'is good')
print(a)
print(b)
(a,b) = ('python', 'is good')
print(a)
print(b)

# LIST 
a, b = ['python','만세']
print(a)
print(b)
[a,b] = ['python','만세']
print(a)
print(b)
[a,b] = 'python', '만세'
print(a)
print(b)

#여러개 변수에 같은 값 대입
a = b = 'python'
print(a)
print(b)
print(id(a))
print(id(b))

#파이썬 변수의 값 교환하기
a,b = 3,5
print(a,b)
a,b = b,a
print(a,b)

 

 

 

 

 

 

 

 

 

출처 : DO IT ! 점프 투 파이썬 책, 유트브 동빈나님 파이썬 강의

반응형

댓글