[TIL] Python (자료형 - 딕셔너리, 집합), 변수

이지예·2022년 4월 13일
0

Python

목록 보기
5/10

딕셔너리 자료형

대응관계를 나타낼 수 있는 자료형. 다른 언어에서도 이러한 대응관계를 나타내는 자료형을 갖고 있는데, 이를 연관배열 혹은 해시라고 한다.

딕셔너리는 key와 value를 한 쌍으로 갖는 자료형이다. 리스트나 튜플처럼 순차적으로 요솟값을 구하지 않고, key를 통해 value를 얻는다. key에는 변하지 않는 값을 사용하고, value에는 변하는 값과 변하지 않는 값 모두 사용한다. 또한 key에는 리스트를 넣을 수 없지만 value에 리스트도 넣을 수 있다.

a['name']='pey' #딕셔너리 a에 'name':'pey'쌍이 추가된다. 
a[2]='b' #a에 2:'b'라는 쌍도 추가된다.
#a={'name':'pey',2:'b'}
del a[2] #지우고싶은 key를 입력하면 해당 key:value쌍이 삭제된다.
#a={'name':'pey'}

딕셔너리에서 인덱싱을 쓰지 않고 key를 사용해서 value를 구하는 방법밖에 없다. 동일한 key가 2개 존재할 경우 1개를 제외한 나머지 key:value값이 모두 무시된다. (맨 마지막 값만 인식되는듯)


<딕셔너리의 함수>

  • keys() : 딕셔너리의 key만을 모아서 dict_keys 객체를 돌려준다.
    파이썬 3.0이후 버전에서 딕셔너리의 반환값으로 리스트가 필요한 경우에는 list(a.keys())를 사용하면 된다. 리스트 고유의 append, insert, pop, remove, sort함수는 수행불가
>for k in a.keys():
	print(k) #이런식으로는 사용 가능. 들여쓰기 꼭 해야됨. 안하면 에러뜸
  • values() : 딕셔너리의 value값만 얻을 수 있음
  • items() : key와 value의 쌍을 튜플로 묶은 값을 dict_items객체로 돌려준다.
  • clear() : 딕셔너리 요소 다 지우기
  • get() : key에 해당되는 value돌려준다. 없는 키는 None을 돌려준다.
    key값이 없을 경우 None말고 미리 정해둔 디폴트 값을 대신 가져오게 하고싶을때는 get(x,'디폴트값')을사용
  • '요소' in a : 해당 key가 딕셔너리 안에 있는지 조사하는 방법으로, 있으면 True, 없으면 False를 반환한다.

집합 자료형

집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형
set()를 이용해 만들 수 있다.

s1=set([1,2,3])
s1 #{1,2,3}
s2=set("hello")
s2#{'e','h','l','o'}

set은 중복을 허용하지 않아서 중복을 제거하기 위해 필터 역할로 종종 사용하기도 한다.
그리고 순서가 없다. 따라서 인덱싱으로 값을 얻을 수 없다.
set자료형을 인덱싱으로 접근하려면 리스트나 튜플로 변환 후 접근해야 한다.

li=list(s1)
li #[1,2,3]
t1=tuple(s1)
t1 #(1,2,3)

set 자료형은 교집합, 차집합, 합집합을 구할때 유용하게 쓰인다.
1. 교집합

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
s1 & s2
#{4, 5, 6}
s1.intersection(s2) 
#{4, 5, 6}
  1. 합집합
s1 | s2
#{1, 2, 3, 4, 5, 6, 7, 8, 9}
s1.union(s2)
#{1, 2, 3, 4, 5, 6, 7, 8, 9}
  1. 차집합
s1 - s2
{1, 2, 3}
s2 - s1
{8, 9, 7}
s1.difference(s2)
{1, 2, 3}
s2.difference(s1)
{8, 9, 7}

집합 자료형 관련 함수들

add : 한개의 값만 추가
update:여러개 한꺼번에 추가
remove:특정값 제거

변수

파이썬에서 변수는 저장된 값을 스스로 판단하여 자료형을 지정한다.

a=[1,2,3]

일때 [1,2,3]값을 가지는 리스트 자료형(객체)이 자동으로 메모리에 생성되고
변수 a는 해당 리스트가 저장된 메모리의 주소를 가리키게 된다.

id(a) : a변수의 메모리 주소 확인법

b변수에 a변수를 대입하면 b와 a는 완전히 동일해진다. 동일한 객체를 가리키고 있는지 판단하는 명령어 is를 실행하면 참이 나온다

a is b
#True

[1,2,3]리스트를 참조하는 변수가 2개가 된다는 말이다. id함수를 사용하면 a와 b의 아이디가 같음을 알 수 있다. a리스트의 값을 변경시키면 b도 똑같이 바뀌게 된다.

b변수를 생성할 때 a와는 다른 주소를 가지고 값은 같게되는 방법은 2가지 방법이 있다.

  1. [:] 이용
    b=a[:] #a리스트 값을 바꾸더라도 b리스트에는 영향을 끼치지 않는다.

  2. copy 모듈 이용

    from copy import copy
    b=copy(a) #b=a[:]와 동일하다 

    a가 리스트인 경우에는 리스트 자료형의 자체 함수인 copy함수를 사용해도 copy 모듈을 사용하는 것과 동일하다.

    b=a.copy()
    b is a #False

    위 두가지 방법 모두 False가 나온다. b와 a가 가리키는 객체가 서로 다르기때문이다.

<변수를 생성하는 방법>

a,b=('python','life')
(a,b)='python','life'
[a,b]=['python','life']

세가지 방법 모두 a='python', b='life'가 나온다
여러 변수에 같은 값을 대입할 수도 있다.

a=b='python' 
a=3;b=5
a,b=b,a #값을 바꿀수도 있다.

0개의 댓글