본문 바로가기

About

(221)
[Python] Collections - OrderedDict OrderedDict 기본 딕셔너리와 거의 비슷하지만, 입력된 아이템들의 순서를 기억하는 Dictionary 클래스 즉 Dict와 달리, 데이터를 입력한 순서대로 dict를 반환함 collections로 부터 import 하여 사용 from collections import OrderedDict 기존 Dict 예시 d = {} d['Hello'] = 100 d['How'] = 200 d['are'] = 300 d['you'] = 500 print(d) v = {} v['How'] = 200 v['are'] = 300 v['you'] = 500 v['Hello'] = 100 print(v) if(d == v): print("두 Dictionary가 동일하다") 두 Dictionary의 입력 순서를 다르게 ..
[Python] Collections - deque Python Collections List, Tuple, Dict에 대한 Python Built-in 확장 자료 구조(모듈) 편의성, 실행 효율 등을 사용자에게 제공함 다음과 같은 모듈이 존재한다. from collections import deque from collections import Counter from collections import OrderedDict from collections import defaultdict from collections import namedtuple Deque Stack과 Queue를 지원하는 모듈 List에 비해 효율적인 자료 저장방식을 지원함 collections로 부터 import하여 사용 from collections import deque 기본적으로..
[Python] Lambda & Map & Reduce Lambda 함수 이름 없이, 함수처럼 쓸 수 있는 익명함수 수학의 람다 대수에서 유래함 Python 3부터는 권장하지는 않으나, 여전히 많이 사용됨. 간단한 함수들을 선언해서 사용하면 좋을 것 같다.(ex 함수의 제곱, 덧셈 반환 등..) Map function Sequence 자료형의 각 Element에 동일한 functon을 적용하는 함수 map(function_name, list_data) 첫 번째 인자는 적용할 함수, 두 번째 인자는 적용할 데이터이다. 위의 예제에서 기존의 데이터 [1,2,3,4,5]에 각 요소들을 제곱하는 람다 함수를 적용하여 모든 요소가 제곱된 새로운 리스트가 반환되었다. 위와 같이 Map()와 Lambda를 같이 사용하면 편리하게 기존의 데이터를 수정하여 구성할 수 있다...
[Python] Enumerate(), Zip() Enumerate List의 Element를 추출할 때 번호를 붙여서 추출할 수 있게 해주는 함수 List를 다룰 때 index번호가 필요한 경우 유용하게 사용할 수 있다. 위 코드에서 idx에 번호가, el에 리스트의 element가 저장되어 출력된다. 기존의 numbers 리스트의 요소를 index와 함께 묶은 list로 저장한다. 참고로 새로 생긴 list의 요소들의 type은 'tuple'이다. 다음과 같이 dict 자료형 또한 생성 가능하다. Zip 두 개의 list의 값을 병렬적으로 추출하는 함수 함수명 처럼 두 개의 list를 Zip해주는(묶어주는) 함수이다. 위의 예제에서 볼 수 있듯이 list1과 list2가 병렬적으로 a,b에 반환된다. 병렬적으로 라는 말은 두 리스트의 같은 index..
[Python] List comprehension - List comprehension이란 기존의 List를 사용하여 간단히 다른 List를 만드는 기법 포괄적인 List, 포함되는 List라는 의미로 사용 파이썬에서 가장 많이 사용되는 기법 중 하나 일반적으로 for + append 보다 속도가 빠르다 기존의 코드 스타일과 List Comprehension을 적용한 코드를 비교해보자. 위의 코드를 List comprehension을 이용한 코드로 변화하면 다음과 같다. List comprehension을 사용하면 코드도 짧고 속도도 빠르다. 중첩 Loop 또한 List comprehension으로 구현할 수 있다. 위의 코드는 case1에 해당하는 i loop 내부에 case2에 해당하는 j loop가 있다고 생각하면 된다. 따라서 i를 고정시키고, ..
[Python] Split(), Join() - Split() String Type의 값을 나눠서 List 형태로 변환하는 함수 즉, 문자열을 일정한 규칙으로 분리하여 리스트로 바꿔주는 함수이다. 리스트에 있는 값을 여러 개의 변수로 unpacking 하는 것 또한 가능하다. 이러한 split함수의 특징으로 도메인을 분리할 수도 있다. - Join() String List를 합쳐서 하나의 String으로 반환할 때 사용 즉, 리스트에 담겨있는 문자열들을 하나의 문자열로 바꿔주는 함수이다. 이러한 join함수의 특징으로 앞에서 분리한 Domain을 쉽게 합칠 수 있다. 이렇듯 split()과 join은 반대되는 느낌의 함수로 문자열을 손쉽게 분리하고 합치는 기능을 제공한다. 참고 https://www.edwith.org/aipython/joinLec..
[Docker] Docker의 작동 구조 (1) (namespace) 컨테이너를 구획화하는 장치(namespace) Docker는 컨테이너라는 독립된 환경을 만들고, 그 컨테이너를 구획화하여 애플리케이션의 실행 환경을 만든다. 이 컨테이너를 구획하는 기술은 Linux 커널의 namespace(이름공간)라는 기능을 사용한다. namespace란 한 덩어리의 데이터에 이름을 붙여 분할함으로써 충돌 가능성을 줄이고, 쉽게 참조할 수 있게 하는 개념이다. 이름과 연결된 실체는 그 이름이 어떤 namespace에 속해 있는지 고유하게 정해진다. 그래서 이름공간이 다르면 동일한 이름이라도 다른 실체로 처리된다. PID namespace PID란 Linux에서 각 프로세스에 할당된 고유한 ID를 말한다. PID namespace는 PID와 프로세스를 격리시킨다. namespace가 다..
[Docker] Docker 컴포넌트 Docker은 여러 개의 컴포넌트로 구성되어 있다. 핵심 기능인 Docker Engine을 중심으로 컴포넌트를 조합하여 애플리케이션 실행 환경을 구축한다. Docker 컴포넌트의 개요는 다음과 같다. Docker Engine (핵심 기능) Docker 이미지를 생성하고 컨테이너를 가동시키기 위한 Docker의 핵심 기능. Docker 명령의 실행이나 Dockerfile에 의한 이미지도 생성한다. Docker Registry (이미지 공개 및 공유) 컨테이너의 바탕이 되는 Docker 이미지를 공개 및 공유하기 위한 레지스트리 기능. Docker의 공식 레지스트리 서비스인 Docker Hub도 이 Docker Registry를 사용한다. Docker Compose (컨테이너 일원 관리) 여러 개의 컨테이너..
[Python]Pythonic Code란 Pythonic Code란 Pythonic코드는 파이썬답게 코드를 짜는 것이다. 그렇다면 파이썬다운 코드란..?? "파이썬의 기능들을 잘 이용하여 만든 간결하고 가독성이 좋은 코드" 라고 생각한다. 즉, 파이썬 스타일로 코드를 짜는 것을 의미한다. 정해져있는 규칙이 아니라 권장하는 코드 스타일을 의미한다. 파이썬스러운 코드를 작성할 수 있도록 도와주는 가이드 또한 있다. 바로 파이썬 코딩 컨벤션 PEP 8 이다. https://www.python.org/dev/peps/pep-0008/ PEP 8 외에 파이썬의 내장 함수를 이용한 다양한 Pythonic Code를 포스팅 할 예정이다.
[MongoDB] Mongoose-auto-increment (자동 증가 번호) MySQL에서 많이 사용하는 Auto increment를 NoSQL인 MongoDB에서도 사용 가능하다. Mongoose를 이용하여 auto-increment를 사용해보자 우선 Node.js 에서 npm을 이용하여 Mongoose-auto-increment를 설치한다. npm install mongoose-auto-increment 그 후 auto-increment를 require 해준 후 연결된 Mongoose connection을 이용하여 초기화시켜준다. var mongoose = require('mongoose'); var autoIncrement = require('mongoose-auto-increment'); autoIncrement.initialize(mongoose.connection); ..