Python/Programmers 강의정리

[ 파이썬을 파이썬답게 ] Sequence Types 다루기, Itertools, Collections 모듈 활용하기

hae-koos 2022. 1. 6. 12:53
728x90
반응형
모든 게시물은 macOS Monterey 12.0.1 버전 기준으로 작성하였습니다.
programmers '파이썬을 파이썬답게' 강의를 바탕으로 작성하였습니다.

 

 

 

이번에도 역시 거짓말처럼 보통 사람들은 ~ 에 해당하는 풀이를 냈다.

심지어 join은 이따금 누군가의 알고리즘 답안에서 자주 봤는데 막상 이용할

생각은 들지 않는다. 경험을 쌓자.

 


 

 

떠올릴 수 있을까라는 우려는 생기지만 떠올릴 수 있어야 한다.

 

 


 

 

역시 이중반복문이 가장 먼저 떠오른다..

 

 

단일반복문 풀이도 존재하고..

 

 

더 좋은 방법들도 있다.

 

 

이해해서 활용할 수 있을 것처럼 보이는 방법은 위 세 가지 정도.

특히 reduce 함수를 처음 봤는데 매우 유용하다. 

reduce 함수를 활용한 몇 가지 예를 확인하자.

 

from functools import reduce 형태로 import 하며,
reduce(집계함수, 순회 가능 데이터, 초기값) 형태로 사용한다.

 

누적합 계산

 

 

초기값이 존재하면 그 초기값에 하나씩 더해가는 것을 확인하자.

초기값이 없다면 첫 번째 원소 1부터 뒤의 값이 더해지니 수행은 9번

초기값이 있다면 10에 첫 번째 원소가 더해지며 시작하니 총 수행은 10번이다.

 

특정 key 값만 더하기

 

 

음 아직 의문인 건 초기값을 잡지 않으면 에러가 뜨고,

해결하기 위해 x['key'] + y['key'] 형태로 놓아도 에러가 뜬다.

첫 번째 에러는 dict와 int는 더할 수 없다는 에러.

두 번째 에러는 int는 subscriptable 하지 않다는 에러.

첫 번째 에러는 코드 자체가 lambda x, y : x + y['age']니까 이해가 되는데

두 번째 에러는 검색을 해봤는데.. 왜 뜨는 지는 이해가 되질 않는다,,

정수 자료형에 인덱싱을 해버리면 생기는 에러라고 하는데..

 


 

 

풀지 못했다. 알파벳 소문자로 이루어진 리스트를 짜고 for문을 돌려가며

해당하는 원소의 인덱스를 하나씩 높여 최대 위치를 찾으려고 했지만

두 번째 예시와 같은 경우를 해결하지 못한다.

 

 

 

어떤 단어가 주어졌을 때 단어에 포함된 각 알파벳의 글자 수를 세어주는 함수다.

사전형 데이터에서 value 값을 추출하고 내림차순으로 정렬한다.

가장 큰 value 값이 해당 리스트의 0번째 index에 존재할 것이기에 big 변수에 저장.

[ i for i, k in mydict.items() if big == k ] 가 제일 이해하기 어려웠는데

mydict.items()는 dict_items([('d', 3), ('f', 3), ('e', 1), ('g', 1)]) 형태로 출력되고,

i를 리스트에 넣을 건데 k가 big이랑 같은 알파벳만 리스트에 넣을 거야 ~ 라는 이야기.

마지막으로 사전순 정렬을 하면 정답이다.

728x90
반응형