6일차 파이썬 프로그래밍의 날개_라이브러리편
유용하게 쓸 수 있는 라이브러리들을 가져왔습니다.
호호
바로 봅시다!
math.gcd
최대공약수를 쉽게 구할 수 있다.
import math
math.gcd(20, 80) → 20
최대공약수란?!
두 수의 공통된 약수 중에서 가장 큰 약수
math.lcm
최소공배수를 쉽게 구할 수 있다.
import math
math.lcm(20, 80) → 80
최소공배수란?!
두 수의 공통된 배수 중에서 가장 작은 배수
random
난수를 발생시키는 모듈
import random
random.random()
이렇게 써주면 0.0에서 1.0 사이의
실수 중에 난수를 돌려준다.
난수 중에서도 정수를 돌려주는것을
randint 라고 한다.
import random
random.randint(1,10) → 8
import random
random.randint(1, 55) → 28
random의 재미있는 예시를 가져왔다.
pop을 해주는 과정이 나와있는데
pop는 인덱스를 뽑아서 없애주는 친구이기 때문에
len(data)-1 을 해준 모습이다.
더 쉽게 하는 방법도 있다고 한다.
choice
함수라고 한다.
data에서 random으로 무작위로 초이스! 한것이다.
그다음에 remove로 뽑아서 없애준다.
pop와 remove의 차이는 인덱스와 값이라고 볼 수 있겠다.
그 이외 리스트의 항목을 무작위로 섞고 싶을 때는
random.shuffle
함수를 사용한다.
import random
data = [1,2,3,4,5]
random.shuffle(data)
data → [4,2,3,5,1]
itertools.zip_longest
itertools.zip_longest같은 개수의 자료형을 묶는
파이썬 내장함수인 zip()와 똑같지만
이 함수는 전달한 반복가능 객체의 길이가 다르다면
긴것을 기준으로 빠진 값은 fillvalue에 설정한 값으로 채울 수 있다.
쉽게 또 예시를 가져왔다.
길어서 그냥 사진으로 가져온다 호호..
간식이 더 적기 때문에 적은갯수만큼 묶이게 된다.
intertools.zip_longest 를 사용해서
사람이 많다면 부족한 간식을 새우깡으로 채울 수 있다.
itertools.permutation
itertools.permutation(iterable, r)
반복 가능 객체 중에서 r개를 선택한 순열 리턴
순열 : 서로 다른 n개의 원소에서 r개를 중복없이 순서에 상관하며 선택하거나 나열
3장의 카드 중 순서에 상관없이 2장을 뽑는경우는 3가지 이다. (조합)
1,2
2,3
1,3
두장의 카드를 꺼내 만들 수 있는 2자리 숫자 이기 때문에 중복과 상관없이 써야한다.
1,2
2,1
2,3
3,2
1,3
3,1
import itertools
list(itertools.permutations(['1','2','3'], 2))
→ [('1', '2'), ('1', '3'), ('2', '1'), ('2', '3'), ('3', '1'), ('3', '2')]
for문과 섞기도 가능하다
for a,b in itertools.permutations(['1','2','3'],2) :
print(a+b)
→ 12 13 21 23 31 32
itertools.combination
itertools.combination(iterable,r)
반복 가능 객체 중에서 r개를 선택한 순열 리턴
import itertools
it = itertools.combinations(range(1,46),6) #45개의 숫자 중 6개를 선택
그렇다면 이 갯수가 얼마나 될까?
len(list(itertools.combinations(range(1,46),6))) → 8145060
중복 조합은 어떻게 될까?
intertools.combinations_with_replacement(range(1,46),6)))
라고 쓰면 답은 15890700이 된다.
functools.reduce
functools.reduce(function, iterable)
함수를 반복가능한 객체의 요소에
왼쪽에서 오른쪽으로 차례대로
하나씩 누적적용하여 하나의 값으로 출력한다.
이런 긴 문장을 functools.reduce()를 사용해보자.
import functools
data=[1,2,3,4,5]
result = functools.reduce(lambda x, y : x+y, data)
print(result)
여기서 람다를 호다닥 설명하면
lambda x, y 미지수 x, y를 지정하고 :
x + y 둘이 더해준 값을 reduce 한다 ,
data에 있는 정보에서
사실 람다에는 미지수를 하나밖에 못하는데
reduce 라는 함수 때문에 미지수가 두개 필요해서.. 쓴 것입니다.
람다를 통해 x,y값으로 더해준 값을 자동으로 x로 옮겨줘서
처음 1 +2 해서 나온 3의 값을 다시 x에 넣고
다음 data에 있는 3을 가져와서 y에 넣어주고
3 + 3 해준 6의 값을 다시 x에 넣고.....주르르르르르륵 진행
번외) functools.reduce()로 최댓값 & 최솟값 구하기
num_list = [3, 2, 8, 1, 6, 7]
max_num = functools.reduce(lambda x,y : x if x>y else y, num_list)
print(max_num) → 8
최솟값은 어떻게 해야할까?
저 노란부분을 x<y로 해주면 되겠지요?!?!? 호호
절대 귀찮아서 안쓴게 아닙니다.....호호...호..
operator.itemgetter
주로 sorted와 같은 함수의 key 매개변수에 적용해서
다양한 기준으로 정렬할 수 있도록 도와주는 친구
students = [ ("jane", 22, 'A'), ("dave", 32, 'B'), ("sally", 17, 'B'), ]
나이순으로 정리하고싶다면 어떻게 해야할까?!
from operator import itemgetter
students = [ ("jane", 22, 'A'), ("dave", 32, 'B'), ("sally", 17, 'B'), ]
result = sorted(students, key=itemgetter(1))
이렇게 해주면 나이순으로 젊은사람부터 나오게 된다.
식을 보면 알듯
itemgetter(1) 튜플의 두번째 요소를 기준으로 정렬하겠다는 의미가 담겨있다.
만약 2였다면 혈액형순이었을것이다.
이것은 리스트 안에서 튜플이었을때고
이번엔 딕셔너리일때를 생각해보자
students = [
{"name": "jane", "age": 22, "grade": 'A'},
{"name": "dave", "age": 32, "grade": 'B'},
{"name": "sally", "age": 17, "grade": 'B'},
]
나이순으로 해보자.
아까랑 식은 거의 동일하지만 result만 조금 다르다.
함께 보자
result = sorted(stduents, key=itemgetter('age'))
print(result)
이렇게 해주면 age순으로 정렬된다.
딕셔너리에는 인덱스가 없기 때문에 딕셔너리의 key값으로 찾아야한다.
같은 key가 아님에 주의하자!
만약 딕셔너리도 아니고 튜플도 아니고 리스트도 아니라면?!
operator.attrgetter()
객체일때 사용하는 함! 수!
key = attregetter 이 차이 말고는 사실 동일하다.
이제 뭐 사실 코테중심적으로 쓴 글이었지만
파이썬의 대부분을 적어낸거같다...
음...내 머리속엔 대부분이 없는데..쓰긴 다써버렸눼...호호
마지막 페이지를 다읽은 당신!!
좋은 하루가 될 겁니다.
내가 장담해주지요
행복한 하루 되세요!!🌞
끗!!!!