오늘도 점프 투 파이썬.
모르는 것만 빠르게 훑고 가자.
1.
set는 {} 중괄호를 사용한다. 그냥 고1때 배운 집합이라고 생각하면 된다.
set은 set()의 괄호 안에 리스트를 넣거나 문자열을 넣어 만들 수 있다.
s = set([1,2,3,4])
print(s)
#{1, 2, 3, 4}
t =set("Hello")
print(t)
#{'o', 'e', 'l', 'H'}
set()의 괄호 안에 문자열을 넣으면 다 분리되어서 요소로 저장된다는 게 신기하다.
2.
비어있는 set는 이렇게 만들 수 있다.
s = set()
3.
- ordered: tuple, list
순서가 있는 자료형은 인덱싱으로 값을 얻을 수 있다.
- unordered: dictionary, set
인덱싱은 ordered 자료형의 특권이다.
따라서 set 자료형에 저장된 값을 인덱싱으로 접근하려면 리스트나 튜플로 변환한 후에 해야한다.
4.
set는 중복을 허용하지 않기 때문에 자료형의 중복을 제거하기 위한 필터로 사용하기도 한다.
5.
set 자료형을 유용하게 사용하는 경우는 교집합, 합집합, 차집합을 구할 때이다.
- 교집합
s1 = {1,2,3,4,5,6}
s2 = {4,5,6,7,8,9}
print(s1&s2)
print(s1.intersection(s2))
두 명령문 모두 아래와 같이 출력된다.
{4, 5, 6}
- 합집합
s1 = {1,2,3,4,5,6}
s2 = {4,5,6,7,8,9}
print(s1|s2)
print(s1.union(s2))
두 명령문 모두 아래와 같이 출력된다.
{1, 2, 3, 4, 5, 6, 7, 8, 9}
- 차집합
s1 = {1,2,3,4,5,6}
s2 = {4,5,6,7,8,9}
print(s1-s2)
print(s1.difference(s2))
두 명령문 모두 아래와 같이 출력된다.
{1, 2, 3}
6.
set 관련 함수들
- add: 특정 값 더하기
s1 = {1,2,3}
s1.add(4)
print(s1)
#{1, 2, 3, 4}
- update: 여러개의 값 동시에 추가
s1 = {1,2,3}
s1.update({5,6,7})
print(s1)
#{1, 2, 3, 5, 6, 7}
update() 괄호 안에는 list 자료형을 넣어도 되고, set 자료형을 넣어도 된다.
- remove: 특정 값 제거하기
s1 = {1,2,3}
s1.remove(3)
print(s1)
#{1, 2}
7.
boolean 에서 수학적으로 참인 수식은 그 자료형이 bool이다.
print(type(1==1))
#<class 'bool'>
8.
자료형에는 참과 거짓이 있다. 이는 매우 중요한 특징이고 자주 쓰인다.(아직 본 적은 없다)
bool()은 약간 거짓말탐지기 같은 함수다.
- string, list, tuple, dictionary 등의 값이 비어있으면 ( "", [] , () ,{} ) 거짓이 된다.
print(bool(""))
print(bool([]))
print(bool(()))
print(bool({}))
모두 아래와 같이 출력된다.
False
- 반대로 string, list, tuple, dictionary 등의 값이 비어있지 않으면 참이 된다. string에서는공백이라도 들어있으면 참이다.
print(bool(" "))
print(bool("im string"))
print(bool([1,"a"]))
print(bool((1,"a")))
print(bool({1,"a"}))
모두 아래와 같이 출력된다.
True
- 숫자에서는 값이 0일때 거짓이다.
print(bool(0))
#False
- None도 거짓이다.
print(bool(None))
#False
9.
True와 False가 어떻게 쓰이는지를 보자.
a = [1,2,3,4]
while a:
print(a.pop())
아래와 같이 출력된다.
4
3
2
1
while a: 는 while a=True: 와 같은 표현이다.
리스트에서 끝의 요소부터 반환하고 그 요소는 지우는 pop()이 여기서 쓰인다.
a가 True일 동안, 즉 a가 채워져있는 동안 4,3,2,1이 차례대로 뽑히고 a는 비워진다.
비워진 a는 False가 되고 while문을 탈출한 후 더이상 출력이 이루어지지 않는다.
엄청 간단한 코드인데 이렇게 True, False가 쓰이는 걸 보니 신기하다.
여기서 핵심은 이거다. "비어있는 자료형은 False이다"
10.
변수는 자료형의 값을 저장하는 공간이다.
변수를 만들 때에는 =(assignment) 기호를 사용한다.
다른 프로그래밍 언어인 C나 JAVA에서는 변수를 만들 때 자료형을 직접 지정해야한다.
근데 파이썬은 그럴 필요 없다. 파이썬은 변수에 저장된 값을 스스로 판단하여 자료형에 지정하기 때문이다.
변수를 만드는 방법은 다음과 같다.
변수 이름 = 변수에 저장할 값
변수 이름을 반드시 =(assignment) 기호 왼쪽에 적어주어야 한다.
반대로 적어주면 변수가 안 만들어진다. 예전에 반대로 썼다가 아주 낭패를 봤다;;
11.
파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다.
객체는 우리가 지금껏 보아왔던 자료형과 같은 것을 의미하는 말이다.
12.
a =[1,2,3,4]
위와 같이 코드를 작성한다.
→ [1, 2, 3] 값을 가지는 리스트 자료형(객체) 가 자동으로 메모리에 생성된다.
→ 그러면 변수 a는 [1, 2, 3] 리스트가 저장된 메모리의 주소를 가리키게 된다.
** 메모리: 컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 공간이다.
id() 함수는 변수가 가리키고 있는 객체의 주소 값을 돌려주는 파이썬 내장 함수이다.
a 변수가 가리키는 메모리의 주소는 다음과 같다.
a =[1,2,3,4]
print(id(a))
#2467117023104
변수 a의 리스트 주소값은 2467117023104이다.
13.
a =[1,2,3,4]
b= a
b변수에 a변수를 대입하면 b는 a와 완전히 동일해진다.
id함수를 이용해 확인할 수 있다.
a =[1,2,3,4]
b= a
print(id(a))
print(id(b))
2092397117376
2092397117376
변수 a와 b의 id값이 동일하다.
b변수에 a변수를 대입하면 b는 a와 완전히 동일해지고
다만 [1, 2, 3, 4] 리스트를 참조하는 변수가 a 변수 하나에서 a,b 변수 둘로 늘어난다.
파이썬 명령어 is는 동일한 객체를 가리키고 있는지 판단한다.
a =[1,2,3,4]
b= a
print(a is b)
#True
is를 이용해도 a,b 변수가 동일한 객체를 가리키고 있다는 것이 나타난다.
여기서 a가 가리키는 리스트에 요소를 추가해도 b는 a와 똑같이 바뀐다
a =[1,2,3,4]
b= a
a.append(5)
print(a)
print(b)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
14. 리스트 복사
그렇다면 b변수를 생성할 때 a 변수의 값을 가져오면서 a와는 다른 주소를 가리키게 하는 방법은 무엇일까?
두가지 방법이 있다.
- [:] 이용
[:]는 리스트 전체를 가리킨다.
a =[1,2,3,4]
b= a[:]
print(id(a))
print(id(b))
2925603143488
2925607962432
- copy 모듈 이용
이것도 두가지 방법이 있다.
-copy 모듈의 copy 함수 사용하는 방법.
from copy import copy를 해줘야 한다.
from copy import copy
a =[1,2,3,4]
b= copy(a)
print(id(a))
print(id(b))
3140145796352
3140145014208
-list 자료형의 자체 함수인 .copy() 함수를 사용하는 방법(이 방법이 더 나은 듯)
a =[1,2,3,4]
b= a.copy()
print(id(a))
print(id(b))
1771572707136
1771573004224
15.
튜플로 변수 a,b에 값을 대입할 수 있다.
a,b = (1,2)
print(a)
print(type(a))
1
<class 'int'>
튜플이니까 괄호를 생략해도 된다.
a,b = 1,2
print(a)
print(type(a))
1
<class 'int'>
list로도 변수 a,b에 값을 대입할 수 있다.
a,b = [1,2]
print(a)
print(type(a))
1
<class 'int'>
16.
두 변수의 값을 간단히 바꿀 수도 있다.
a= 3
b = 5
a,b = b,a
print(a)
print(b)
이렇게 간단하게 바꿀 수 있었다니... 신기하다.
<2장 연습문제>
2장 연습문제(https://wikidocs.net/42526)
#1
score = {"국어":80,"영어":75,"수학":55}
sum = 0
for val in score.values():
sum += val
print(sum//len(score.values()))
#2
if 13%2==1:
print("홀수")
else: print("짝수")
#3
num = "881120-1068234"
연월일, 뒷자리 = num[:6],num[-7:]
print(연월일, 뒷자리)
#4
num = "881120-1068234"
print(num[-7])
#5
a = "a:b:c:d"
print(a.replace(":","#"))
#6
a = [1, 3, 5, 4, 2]
a.sort()
a.reverse()
print(a)
#7
a= ['Life', 'is', 'too', 'short']
print(' '.join(a))
#8
print((1,2,3)+(4,))
17.
튜플끼리 더할 수 있다.
[교재]
https://wikidocs.net/book/1
'Python' 카테고리의 다른 글
211230 학습일기 (0) | 2021.12.31 |
---|---|
211224 학습일기 (0) | 2021.12.26 |
211222 학습일기 (0) | 2021.12.22 |
211221 학습일기 (0) | 2021.12.21 |
211216 학습일기 (0) | 2021.12.21 |