단어 수 세기 어떤 주어진 문자열에서 단어를 세어, 단어들이 자주 나오는 순으로 정렬하는 방법에 대해서 알아보자. 종이와 펜으로 센다면 만약 어떤 책의 한 페이지에 나온 단어의 빈도수를 조사하기 위해서 종이와 펜이 주어져 있다면 어떻게 풀것인가? 보통 다음과 같은 방법을 생각해 낼 수 있을 것이다. 종이를 세로로 반으로 접는다. 왼쪽에는 단어를 쓰고, 오른쪽에는 단어가 나타난 횟수만큼 빗금을 친다. (나이가 좀 있으신 분들은 바를 정자를 쓰면 됩니다.) 책을 읽어나가면서 각 단어를 읽을 때 마다 이미 표기된 단어에는 빗금을 추가하고, 새로 만난 단어는 왼쪽에 단어를 추가하고 오른쪽에 빗금 하나를 친다. 원시적인 방법이긴 하지만, 이 방법이 사실상의 정도(正道)이며, 우리가 작성해야하는 코드 역시 무슨 마..
리스트 정렬하기 파이썬의 리스트는 .sort() 메소드를 이용해서 정렬할 수 있다. 단, 이 때의 정렬은 제자리 정렬로, .sort() 메소드는 리턴값이 없으며 (리턴값이 없는 파이썬 함수가 늘 그러하듯None을 리턴하기는 한다.) 메소드를 호출한 원본 리스트의 내부 원소들이 순서를 바꾸게 된다. 실제로 메모리 사용량을 극히 제한해야 하는 특수한 상황이 아니라면 제자리 정렬보다는 sorted 함수를 이용한 정렬이 보다 안전하다. (제자리 정렬은 되돌릴 수가 없다.) sorted는 말 그대로 "정렬된" 사본을 만들어주는데, .sort()가 리스트 객체의 메소드라는 한계를 갖는데 비해, sorted함수는 "연속열"을 정렬하는 함수이기 때문에 튜플이나 그외의 반복자등의 연속열을 정렬된 리스트로 만들 수 있다...
오늘 다뤄보려는 내용은 파이썬의 반복자(Iterator)이다. 많은 사람들이 파이썬의 "반복자"에 대해서 궁금해하는데, 정작 이 반복자는 파이썬의 반복문 뒤에 숨어서 기능하는 객체이며, 중요한 점은 반복자 자체에 대한 이해보다는 "반복가능한(iterable)" 기능을 구성하는 프로토콜에 대해서 이해하는 것이다. iterable 프로토콜은 파이썬의 for 구문의 핵심이며, 이 구조를 이해하면 반복가능한 커스텀 데이터 타입을 정의하여 만드는 것이 얼마든지 가능하다. 연속열 파이썬의 많은 타입들이 비슷한 동작을 공유하는 경우가 있다. 리스트나 튜플, 문자열과 range 객체는 단일 값이 아니라, 그 내부에 여러 개의 요소들을 포함하는 컨테이너이면서, 각 요소들간의 순서가 존재한다. (set, dict의 경우에..
프로그래밍 언어에서 '이름'은 어떠한 값이나 객체를 가리키는 구분자이다. 따라서 기본적으로 다른 값이라면 다른 이름으로 참조되어야 하는 것이 맞다. 그렇지 않은 경우라면 이름에 대해 충돌이 발생하고 코드는 실행되지 못하거나 예기치 않은 방식으로 동작하게 될 것이다.하지만 이는 이상적인 경우를 상정했을 때이고, 실질적으로는 모든 이름이 유니크할 수는 없다. 심지어 제 3자가 작성한 모듈을 사용해야 하는 경우에는 외부 모듈에서 사용되는 모든 심볼 이름을 체크해서 이름 충돌을 피하는 것은 사실상 불가능하며, 공통 클래스의 서로 다른 인스턴스들도 내부에는 같은 이름의 어트리뷰트를 가지고 있기도 하다. 그래서 많은 언어들은 "이름 공간"이라는 것을 도입하여 한정된 범위에서만 이름에 대한 충돌이 발생하지 않는 선에..
파이썬의 사전 타입 사전은 파이썬에서 기본적으로 제공되는 유일한 맵핑 혹은 해시테이블 타입이다. 사전은 특정한 요소를 찾기 위해 키(key)를 사용한다. 보통은 문자열을 키로 사용하는데, 기본적으로 '변경 불가능'한 파이썬의 기본 타입들은 모두 키가 될 수 있다. (문자열, 정수, 실수, 튜플) 사전 만들기 사전을 생성하는 방법은 다음과 같은 것들이 있다. dict() 생성자 함수를 이용한다. 사전 리터럴을 이용한다. 사전 리터럴은 중괄호 속에 키: 값(콜론으로 구분)의 쌍을 다시 컴마로 구분하여 적는 것이다. dict() 함수를 이용한다면 (키, 값)으로 구성된 튜플의 연속열을 인자로 주면 된다. d1 = { 'a':1, 'b':2, 'c':3, 'd':4 } d2 = dict([('a', 1), ('..
튜플 튜플(tuple)은 두 개 이상의 값을 하나의 단위로 묶는데 사용된다. 튜플의 각 원소는 순서를 가질 수 있으며, 값의 타입에 구애받지 않는다. 또한 튜플은 리스트와 달리 변경이 불가능한 객체이다. 튜플의 각 원소는 인덱스에 의해 참조 가능하기 때문에, 익명의 자료 구조로서도 활용이 가능하다. birthday = (1990, 8, 31) year = birthday[0] month = birthday[1] day = birthday[2] 튜플은 "변경할 수 없는" 객체라 하였다. 이는 튜플의 구성 요소에 대해서 원소를 삽입/삭제/교환할 수 없다는 의미이다. birthday[1] = 9 ----------------------------------------------------------------..
iPython 설치하기 iPython은 파이썬의 기본 대화형 쉘의 기능을 향상 시킨 도구이다. 단순한 편의 기능이 몇 가지 추가된 수준이 아니라 최적화, 디버깅, 코드 편집과 탐색에 있어서 많은 양의 개선된 기능들을 포함하고 있다. tab 키를 통한 자동 완성 여러 줄에 걸친 코드 편집 기능 강화 문법에 따른 색상 강조 대화형 쉘 내에서 OS쉘의 명령을 즉시 호출 명령 수행 시간 및 속도 측정 도구 포함 특정 심볼에 대한 빠른 도움말 탐색 또한 iPython은 단순히 명령줄에서 실행되는 대화형 쉘을 개선하는 과정에서 파이썬 커널과 입출력 부분을 분리했다. 따라서 입출력 부분을 웹서버로 떼어내어 개발한 노트북이라는 기능도 별도로 제공한다. 이 노트북은 웹 브라우저 상에서 파이썬 코드를 셀별로 작성하여, 각..
맵과 필터는 리스트의 원소에 특정한 함수를 적용하여, 리스트의 내용을 바꾸는 조작이다. 실제로는 리스트 축약(List Comprehension) 문법으로 대체하여 더 많이 사용되기 때문에 함수의 사용법 자체는 사실 크게 중요하지 않을 수 있다. 하지만 리스트를 맵과 필터 (그리고 리듀스)를 이용해서 조작하고 다루는 방식은 이른바 함수형 패러다임에서 가장 기본적이고 중요한 멘탈 모델이기 때문에 익혀둘 필요가 있다. 물론 파이썬이 함수형 언어는 아니지만, 이 개념에 익숙해지면 코드를 더욱 간결하고 쉽게 짤 수 있는 기본기를 갖게 된다. 사상(mapping) 맵과 필터에서 가장 기본이 되는 개념은 바로 맵핑 그 자체이다. 함수를 입력을 받아 데이터를 가공하고 출력하는 장치로서 이해하는 개념이 일반적인데1, 이..
- Total
- Today
- Yesterday
- iterable
- Python
- 리스트
- 반복자
- 사전
- mutability
- 복수기준정렬
- dict
- 단어 빈도수
- Lambda
- 함수형
- 리눅스
- 이중리스트를 사용하지 않기
- 튜플언패킹
- jupyter-notebook
- sorted
- ipython-notebook
- 파일입출력
- leapYear
- 정렬키
- 우분투
- globals()
- 표준입력
- python list
- 정렬기준
- 파이썬
- locals()
- short_circuit
- 파이썬노트북
- 변경가능
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |