튜플은 리스트와 비슷하다
a=[1,2,3] //리스트
b=(1,2,3) //튜플
둘의 차이점에 대해 알아보자
리스트는 append, del 등등의 함수로 안의 내용을 변경할 수 있지만 튜플은 변경할 수 없다.
실습으로 직접 확인해보자
t1 = (1,2,'a','b')
del t1[0]
실행 결과
TypeError: 'tuple' object doesn't support item deletion
당연히 안된다..
추가/수정/삭제 등등 그냥 초기값에서 변화를 줄 순 없다
하지만 인덱싱 슬라이싱과 더하기 곱하기 등등 값을 보는 것은 가능하다.
t1 = (1,2,'a','b')
t2 = (3,4)
print(t1 + t2)
출력 결과
(1, 2, 'a', 'b', 3, 4)
t1 t2를 더한 새로운 값을 만든거지 t1 t2에 대한 값은 변하지 않은것이 핵심이다.
a = (1, 2)
a = a*3
print(a)
출력 결과
(1, 2, 1, 2, 1, 2)
a라는 변수에 a*3에 대한 값을 넣는것이기에 하나씩 바꾸는 것이 아니다
<딕셔너리>
- 연관배열(Associative array) 혹은 해시(Hash)
- Key를 통해 Value를 얻는다
dic = {'name' : 'Eric', 'age' : 15}
print(dic['name'])
출력 결과
Eric
위와 같은 형식으로 사용한다. C 구조체의 멤버 느낌이 좀 나는거 같다.
a = {1: 'a'}
a['name'] = "익명"
print(a)
출력 결과
{1: 'a', 'name': '익명'}
a에 name이란 키는 없었는데 2번째 줄 코드를 통해 어떤 key와 value로 값을 넣었다.
이를 삭제해보자
a = {1: 'a'}
a['name'] = "익명"
print(a)
del a['name']
print(a)
출력 결과
{1: 'a', 'name': '익명'}
{1: 'a'}
리스트와 비슷한 형식인데 직접 key를 대입해서 그 값을 지울 수 있다는 사실을 확인할 수 있다.
리스트에서는 순서를 넣었지만 딕셔너리에선 키를 넣는 것이 핵심임을 기억하자
* 주의사항으로는 키와 밸류가 핵심인 만큼 키는 중복되면 안된다 !!
a = {1: 'a', 1: 'b'}
print(a)
출력 결과
{1: 'b'}
위와 같이 앞에 a값은 찾아볼 수 없다.
<딕셔너리에서 키와 밸류를 따로 뽑아 출력할 수 있다>
a = {1: 'a', 2: 'b', 3: 'C'}
print(a.keys())
print(a.values())
print(a.items())
출력 결과
dict_keys([1, 2, 3])
dict_values(['a', 'b', 'C'])
dict_items([(1, 'a'), (2, 'b'), (3, 'C')])
위의 함수들은 자주 사용되니 꼭 기억하고 가자
간단히 for문을 통해 안의 값들을 뽑아보자
a = {1: 'a', 2: 'b', 3: 'C'}
for k, v in a.items():
print("key : " + str(k))
print("value : " + v)
출력 결과
key : 1
value : a
key : 2
value : b
key : 3
value : C
깜빡하고 앞에 설명하지 않은 부분이 있는데 파이썬에서는 들여쓰기를 신경써서 하도록 하자 !
왜 인지는 본인이 출력 해보면 알 것이다.
위와 같은 형식으로 출력하면 된다.
이러한 기법은 자주 사용되니 익숙해지도록 하자
<clear 함수>
a = {1: 'a', 2: 'b', 3: 'C'}
a.clear()
print(a)
출력 결과
{}
clear 함수를 통해 딕셔너리를 비울 수 있다는 사실을 알 수 있다.
위에서 키 값을 통해 밸류값을 출력하는 방식 a[키값] 형식 외에 get 함수를 이용한 방법도 있다.
a = {1: 'a', 2: 'b', 3: 'C'}
print(a.get(4))
출력 결과
None
a[] 방법과 차이점은
대괄호를 이용하면 존재하지 않는 값에 대해 key Error가 발생한다. 하지만 get을 이용하면 존재하지 않는 값이라도 에러가 아닌 None 값이 출력이 되는 것을 확인할 수 있다.
a = {1: 'a', 2: 'b', 3: 'C'}
print(a.get(4, '존재하지 않는 값'))
출력 결과
존재하지 않는 값
default 값일 경우 4, 뒤에 리턴할 값을 넣어서 위와 같은 방식으로도 사용 가능하다
<in>
a = {1: 'a', 2: 'bas', 3: 'C'}
print(2 in a)
출력 결과
True
2번 키의 밸류 값에 a가 있는지 확인하는 코드이다.
C에서는 0과 1이 출력 됐지만 파이썬에서는 논리값 boolean형태로 True, False 값이 출력이 된다.
2번키 안에 밸류 'bas'중 a가 존재하니 결과 값은 True이다.
<집합>
집합의 핵심은 중복된 요소를 가질 수 없다는 사실을 알고 가자
리스트에서는
a = [1,2,2,3,4]
이렇게 같은 요소가 몇번이든 중첩되서 담을 수 있었다.
하지만 집합자료형에서는 이렇게 해선 안된다
집합 자료형은 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형이며 중복을 허용하지 않고 순서가 없다는 특징을 가지고 있다.
s1 = set([1,2,3])
print(s1)
출력 결과
{1, 2, 3}
다른 방식으로는
s1 = {1,2,3}
이렇게 중괄호로 집합을 선언할 수 있다.
s = [1,2,2,3,3]
newList = list(set(s))
print(newList)
출력 결과
[1, 2, 3]
위의 s리스트와 같이 중복된 값을 가지고 있는경우 집합을 선언하면서 [1,2,3]만 남기고 그것을 다시 리스트로 선언해주는 방법도 있다.
집합은 순서가 없이 각 원소들이 있는 것이고 이는 문자열에도 적용된다
s = set("hello")
print(s)
출력 결과
{'o', 'l', 'h', 'e'}
**중복이 없는 것이 가장 중요한 핵심이다 !
집합이란 이름에 맞게 신기한 것들이 있다
<교집합>
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1 & s2)
출력 결과
{4, 5, 6}
s1과 s2 교집합(공통된 원소들)을 이렇게 간단하게 추출할 수 있다.
다른 방식으로는
print(s1.intersection(s2))
이렇게 표현할 수 있다.
<합집합>
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1 | s2)
출력 결과
{1, 2, 3, 4, 5, 6, 7, 8, 9}
s1과 s2 합집합(중복되지 않게 s1과 s2의 모든 원소들)을 추출할 수 있다.
haduri duri duri
다른 방식으로는
print(s1.union(s2))
이렇게 표현할 수 있다.
<차집합>
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1 - s2)
출력 결과
{1, 2, 3}
s1에서 s1과 s2와의 교집합을 빼고 남는 원소들인 s1과 s2의 차집합도 이렇게 간단히 표현 가능하다
다른 방식으로는
print(s2.difference(s1))
이렇게 표현할 수 있다.
<update> 함수
s1 = set([1,2,3,4,5,6])
s1.update([7,8,9,1])
print(s1)
출력 결과
{1, 2, 3, 4, 5, 6, 7, 8, 9}
add 함수로 하나씩 추가하는 것이 아닌 update로 여러가지의 원소들을 추가할 수 있고 중복을 허용하지 않기에 당연히 1은 하나만 표시 된다.
'Python' 카테고리의 다른 글
Python - 제어문 (0) | 2022.03.27 |
---|---|
Python - 자료형의 값을 저장하는 공간 <변수> (0) | 2022.03.27 |
Python - boolean (0) | 2022.03.27 |
Python - 리스트 (0) | 2022.03.27 |
Python - 기초 (0) | 2022.03.27 |