파일 입출력 다루기 어떤 양의 정수들을 입력받고 (예를 들어 0이 입력될 때까지 계속 숫자를 입력 받음) 그 합을 구하는 코드를 작성했다고 생각해보자. 물론 이 프로그램은 매우 간단하게 작성이 될 것이다. 그런데 이 프로그램을 사용할 때를 상상해보자. 합산해야 하는 숫자가 7자리(수백만)숫자 100개 정도된다면, 이를 일일이 키보드로 하나하나 타이핑 하는 것은 매우 번거로운 일일 것이다. 게다가 엔터를 눌러 입력한 후에 숫자가 잘못됐다는 사실을 깨닫는 상황이라면 처음부터 새로 입력해야 하는 아픔이 있을 것이다. 많은 양의 데이터를 일괄적으로 처리하기에 가장 좋은 방법은 입력값을 파일에 저장해 놓은 다음, 이것을 읽어서 처리하는 것이다. 일반적으로 한 개의 레코드를 한 줄에 기록하고 한 줄씩 읽어서 처리하..
CSV 파일은 단순한 텍스트 파일을 데이터 테이블 형식으로 사용하는 포맷이다. 기본적으로 한 행을 1개의 레코드로 사용하며, 개별 필드를 컴마 (혹은 정하기에 따라서는 탭 문자나 임의의 구분자를 사용할 수 있다.)로 구분한다. csv는 기본적으로 플레인 텍스트 파일이기 때문에 텍스트 파일을 읽고 구분자 단위로 쪼개어 각 레코드/필드를 액세스하는 방식으로 처리하는 것도 가능하지만, 이는 제법 귀찮은 여러 작업들을 동반하기 때문에 파이썬 기본 라이브러리에는 csv 파일로부터 필드를 구분하여 읽고 쓸 수 있게 해주는 csv 모듈이 제공된다. 참고로 `csv` 모듈은 텍스트 파일의 내용을 구분자에 따라서 잘라서 제공해주는 것 이상의 역할을 하지 않는다. 각 필드의 값은 모두 문자열이며, 정수 및 실수 값으로 변..
네이버 지식인에서 줏은 문제이다. 텍스트 파일에 상당히 많은 양의 데이터가 있다. (내용으로보건데 특정한 기기의 로그 파일인 것 같다.) 해당 데이터로부터 ID, distance, spd 값을 추출하여 distance가 특정 범위 이내 일 때 SPD의 평균값을 구하고 싶다는 것이 요지이다. 일단 로그 데이터는 아래와 같은 포맷의 텍스트파일이다. [2017-08-05 00:10:00.043] a.b.senser - lader> system: [2017-08-05 00:10:00.043] a.b.senser - lader> ID: 1, distance: 137, spd: -40 [2017-08-05 00:10:00.043] a.b.senser - lader> ID: 2, distance: 155, spd: ..
파이썬의 모든 변수는 특정한 객체에 대한 참조이며, 따라서 변수에는 "대입(assignment)"라는 표현을 쓰지 않고, "바인딩(binding)"이라는 표현을 쓴다고 했다. 보통 파이썬의 변수나 값 특성에 대해서 언급하는 내용은 여기까지인데, 파이썬의 구조에 대한 이해를 좀 더 깊이있게 가지기 위해서는 개별 값의 변경 가능성(mutability)에 대해서도 조금 생각해보자. 파이썬 내의 모든 것은 객체라고 했다. 기본적으로 집합의 성격을 가지는 리스트와 사전(그리고 set)을 제외한 모든 기본 객체는 변경 불가능(immutable)하다. 우리가 표면적으로 프로그래밍 언어를 접할 때에는 실제의 값이 변수 뒤에 가려진다고 느끼기 때문에 변수명이 곧 그 값이라는 생각을 하게 된다. 일차적으로 이러한 개념은 ..
단어 수 세기 어떤 주어진 문자열에서 단어를 세어, 단어들이 자주 나오는 순으로 정렬하는 방법에 대해서 알아보자. 종이와 펜으로 센다면 만약 어떤 책의 한 페이지에 나온 단어의 빈도수를 조사하기 위해서 종이와 펜이 주어져 있다면 어떻게 풀것인가? 보통 다음과 같은 방법을 생각해 낼 수 있을 것이다. 종이를 세로로 반으로 접는다. 왼쪽에는 단어를 쓰고, 오른쪽에는 단어가 나타난 횟수만큼 빗금을 친다. (나이가 좀 있으신 분들은 바를 정자를 쓰면 됩니다.) 책을 읽어나가면서 각 단어를 읽을 때 마다 이미 표기된 단어에는 빗금을 추가하고, 새로 만난 단어는 왼쪽에 단어를 추가하고 오른쪽에 빗금 하나를 친다. 원시적인 방법이긴 하지만, 이 방법이 사실상의 정도(正道)이며, 우리가 작성해야하는 코드 역시 무슨 마..
리스트 정렬하기 파이썬의 리스트는 .sort() 메소드를 이용해서 정렬할 수 있다. 단, 이 때의 정렬은 제자리 정렬로, .sort() 메소드는 리턴값이 없으며 (리턴값이 없는 파이썬 함수가 늘 그러하듯None을 리턴하기는 한다.) 메소드를 호출한 원본 리스트의 내부 원소들이 순서를 바꾸게 된다. 실제로 메모리 사용량을 극히 제한해야 하는 특수한 상황이 아니라면 제자리 정렬보다는 sorted 함수를 이용한 정렬이 보다 안전하다. (제자리 정렬은 되돌릴 수가 없다.) sorted는 말 그대로 "정렬된" 사본을 만들어주는데, .sort()가 리스트 객체의 메소드라는 한계를 갖는데 비해, sorted함수는 "연속열"을 정렬하는 함수이기 때문에 튜플이나 그외의 반복자등의 연속열을 정렬된 리스트로 만들 수 있다...
오늘 다뤄보려는 내용은 파이썬의 반복자(Iterator)이다. 많은 사람들이 파이썬의 "반복자"에 대해서 궁금해하는데, 정작 이 반복자는 파이썬의 반복문 뒤에 숨어서 기능하는 객체이며, 중요한 점은 반복자 자체에 대한 이해보다는 "반복가능한(iterable)" 기능을 구성하는 프로토콜에 대해서 이해하는 것이다. iterable 프로토콜은 파이썬의 for 구문의 핵심이며, 이 구조를 이해하면 반복가능한 커스텀 데이터 타입을 정의하여 만드는 것이 얼마든지 가능하다. 연속열 파이썬의 많은 타입들이 비슷한 동작을 공유하는 경우가 있다. 리스트나 튜플, 문자열과 range 객체는 단일 값이 아니라, 그 내부에 여러 개의 요소들을 포함하는 컨테이너이면서, 각 요소들간의 순서가 존재한다. (set, dict의 경우에..
프로그래밍 언어에서 '이름'은 어떠한 값이나 객체를 가리키는 구분자이다. 따라서 기본적으로 다른 값이라면 다른 이름으로 참조되어야 하는 것이 맞다. 그렇지 않은 경우라면 이름에 대해 충돌이 발생하고 코드는 실행되지 못하거나 예기치 않은 방식으로 동작하게 될 것이다.하지만 이는 이상적인 경우를 상정했을 때이고, 실질적으로는 모든 이름이 유니크할 수는 없다. 심지어 제 3자가 작성한 모듈을 사용해야 하는 경우에는 외부 모듈에서 사용되는 모든 심볼 이름을 체크해서 이름 충돌을 피하는 것은 사실상 불가능하며, 공통 클래스의 서로 다른 인스턴스들도 내부에는 같은 이름의 어트리뷰트를 가지고 있기도 하다. 그래서 많은 언어들은 "이름 공간"이라는 것을 도입하여 한정된 범위에서만 이름에 대한 충돌이 발생하지 않는 선에..
- Total
- Today
- Yesterday
- 정렬기준
- 복수기준정렬
- 우분투
- Lambda
- 반복자
- 정렬키
- leapYear
- locals()
- jupyter-notebook
- ipython-notebook
- 변경가능
- 리눅스
- 파일입출력
- 파이썬
- dict
- 튜플언패킹
- Python
- 파이썬노트북
- short_circuit
- 사전
- python list
- sorted
- 함수형
- 단어 빈도수
- globals()
- 리스트
- 표준입력
- iterable
- 이중리스트를 사용하지 않기
- mutability
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |