실전에서 유용한 표준 라이브러리

itertools 

  • 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공
  • 특히 순열과 조합 라이브러리는 코딩 테스트에서 자주 사용됨.
  • 완전탐색 유령에서 코드를 간결하게 표현이 가능

heapq

  • 힙(Heap) 자료구조를 제공함
  • 일반적으로 우선순위 큐 기능을 구현하기 위해 사용됨.
  • 대표적으로 다익스트라 같은 최단경로 알고리즘에서 자주 사용됨

bisect

  • 이진 탐색(Binary Search) 기능을 제공함.

collections

  • 덱(deque), 카운터(Counter)등의 유용한 자료구조를 포함한다.

math

  • 필수적인 수학적 기능을 제공 .
  • 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이와 같은 상수를 포함함

자주 사용되는 내장 함수 ( 잘 몰랐던 거 위주)

# sorted() with key
array = [('홍길동', 35), ('이순신', 75), ('아무개', 50)]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)

람다 함수를 사용해 sorted 함수에 매개변수로 전달된 array의 1번째 인덱스 값을 키로 지정하고 , 내림차순으로 정렬을 시킨다.

 

'Programming Language > Python' 카테고리의 다른 글

[ 파이썬 기본문법 ]  (0) 2023.07.16

리스트 컴프리헨션

리스트를 초기화하는 방법 중 하나.

  • 대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화 할 수 있음
# 0부터 9까지의 수를 포함하는 리스트
array = [i for i in range(10)]
# range라는 함수는 0부터 9까지 i가 순회 할 수 있도록 해줌
# i라는 변수가 0부터 9까지 증가를 할 때마다, 그 i 값을 원소로 설정해서 리스트를 만듬

print(array)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 이렇게 유용한 게 있었다니…
# 0 부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i & 2 == 1]

#0 부터 19까지 홀수만 출력 됨
print(array)

# 1부터 9까지의 수들의 제곱 값을 포함하는 리스트
array = [i * i for i in range(1,10)]
# i라는 변수는 1부터 9까지 증가하며 i 값들을 제곱해서 새로운 리스트를 만듬

또한, 리스트 컴프리헨션은 2차원 리스트를 초기화 할 때 효과적으로 사용이 가능

특히 N X M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 매우 유용함.

  • 좋은 예시 : array = [[0] * m for _ in range(10)] → 반복 될 때 마다, m (열) 크기 만큼 리스트의 원소를 설정

  • n 번 반복을 할 때마다, 배열(가로) 길이가 m인 리스트(내용물이 0)를 생성함

언더바는 언제 사용 하는가?

파이썬에서는 반복을 수행하되, 반복을 위한 변수의 값을 무시하고자 할때 언더바(_)를 자주 사용한다고 한다.

# 1부터 9까지의 자연수를 더하기
summary = 0 
for i in range(1, 10):
		summary += i
# 반복문을 수행하며 , i값을 더하기 위해 
# i 값이 필요하니 변수를 만듦
# Hello World를 5번 출력

for _ in range(5):
		print("Hello World")

# 반복문을 돌며 특정한 값이 필요없고,
# 그냥 반복만 하고 싶을 경우이니 _ 
# 언더바 사용

튜플 자료형

튜플 자료형은 리스트와 유사하지만 다음과 같은 문법적 차이가 있다.

  • 튜플은 한 번 선언된 값을 변경할 수 없다.
  • 리스트는 대괄호 [] 를 이용하지만, 튜플은 소괄호 () 를 이용한다.

튜플은 리스트에 비해 상대적으로 공간 효율적이다.

# 튜플 사용 예제

a = (1, 2, 3, 4, 5, 6, 7, 8, 9)

# 네 번째 원소만 출력
print(a[3])

# 두 번째 원소부터 네 번째 원소까지
print(a[1:4])

튜플내의 값을 변경하려 한다면( ex : a[2] = 7),

tuple 객체의 값은 Immutable(불변)이니 변경하지 못한다고 에러가 뜸

튜플을 사용하면 좋은 경우

  1. 서로 다른 성질의 데이터를 묶어서 관리해야 할 때
    • 최단 경로 알고리즘에서는 (비용, 노드 번호)의 형태로 튜플 자료형을 자주 사용함
    • 예를 들어 , 학생의 학번, 성적과 같이 다른 성질의 데이터를 묶을 때. 다양한 정보를 포함 가능
  2. 데이터의 나열을 해싱의 키 값으로 사용해야 할 때
    • 튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용될 수 있다.
  3. 리스트보다 메모리를 효율적으로 사용해야 할 때 .

집합 자료형

집합은 다음과 같은 특징이 있다.

  • 중복을 허용하지 않음
  • 순서가 없음

집합은 리스트 혹은 문자열을 이용해서 초기화 할 수 있다.

  • 이때 set() 함수를 이용함.

혹은 중괄호안에 각 원소를 콤마(,)를 기준으로 구분하여 삽입함으로써 초기화 할 수 있다.

데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다.

# 집합 자료형 초기화 방법 1
data = set([1, 1, 2, 3, 4, 5 ]) -> 중복이 제거 된 후, 집합 자료형으로 됨.

# 집합 자료형 초기화 방법 2
data = {1, 1, 2, 3, 4, 4, 5}

# 집합 자료형으 ㅣ연산

a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}

# 합집합
print(a | b)
# {1, 2, 3, 4, 5, 6, 7}

# 교집합
print(a&b)
# {3, 4, 5}

# 차집합
print( a - b)
# {1, 2}

기본 입출력

input() 함수는 한 줄의 문자열을 입력 받는 함수.

map() 함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용.

# 공백을 기준으로 구분된 데이터를 입력 받을 때는 다음과 같이 사용
list(map(int, input().split()))

# 공백을 기준으로 구분된 데이터의 개수가 많지 않다면, 단순히 다음과 같이 사용
a, b, c = map(int, input().split()) -> 바로 a, b, c 변수에 할당 가능

빠르게 입력 받기

사용자로부터 입력을 최대한 빠르게 받아야 하는 경우가 있음

파이썬의 경우 sys 라이브러리에 정의돼 있는 sys.stdin.readline() 메서드를 이용함.

  • 단 입력 후 엔터가 줄 바꿈 기호로 입력되므로 rsstrip() 메서드를 함께 사용함.

조건문과 반복문

조건문에서 아무것도 처리하고 싶지 않을때 pass 키워드를 사용한다고한다.

예시 ) 디버깅 과정에서 일단 조건문의 형태만 만들어 놓고 조건문을 처리하는 부분은 비워놓고 싶은 경우

score = 85

if score >= 80:
  pass # 나중에 작성할 소스코드
else:
  print('성적이 80점 미만입니다')

print('프로그램을 종료합니다')

# 결과 : 프로그램을 종료합니다
# 파이썬 조건문 내에서으 ㅣ부등식

x = 15
if 0 < x < 20:
	print()

# 요런것도 가능하다구 한당 !

람다 표현식

람다 표현식을 이용하면 함수 간단하게 작성할 수 있음

  • 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 점이 특징임.
# 람다 표현식으로 구현한 두 매개변수의 합 구하기
# 이름 없는 함수라고도 불림 (ㄷ ㄷ 처음 앎)
print((lambda a, b : a + b)(3,7))
# 예시: 내장 함수에서 자주 사용되는 람다 함수

array = [('홍길동', 50), ('이순신', 32)]
# 각 원소들이 튜플 형태로 구성되어 있음

print(sorted(array, key=lambda x : x[1])
# 어떠한 튜플이나 리스트와 같은 원소가 있을때, 얘의 두번째 (여기서는 점수 -> 1번째 값)
# 튜플의 2번째 값을 기준으로 정렳할 수 있음
# 정렬 기준 (key 속성)를 람다함수를 사용함.
# 여러 개의 리스트에 적용
list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10]

result = map(lambda a, b: a+b, list1, list2)
# map 함수는 각각의 원소에 대해 어떠한 함수를 적용하는 것임
# 따라서 list1과 list2의 각각의 원소를 더함
# 각각의 순서에 맞는 값끼리 더함 -> 1 +6, 2+7, 3+8 ...

'Programming Language > Python' 카테고리의 다른 글

[ 자주 사용되는 표준 라이브러리 ]  (0) 2023.07.16

대중적인 formatting rule과 linting rule로 설정함

(rule이 각자 다를 수 있으니 충분한 협의 후 코딩 rule마다 변경)

 

1. node package manager install : npm init -y

—> package.json

의존성 표시

 

2. Formatting: prettier

npm install --save-dev prettier

 

—>package.json (prettier install)

—>package-lock.json

 

3. prettier 사용 시 필요 (+ prettier Extension)

.prettierrc 파일 생성

<—.prettierrc—>

 

{

    "semi" : false,  

    "singleQuote": true

}

 

4. .vscode 폴더 생성 -> settings.json 파일 생성 ( 로컬 파일 세팅 모아둠, 본 프로젝트에만 쓰이는 세팅들 for javascript)

<—settings.json—>

{

    "[javascript]": {

        "editor.formatOnSave": true,

        "editor.defaultFormatter": "esbenp.prettier-vscode"

    },

    "[json]": {

      "editor.defaultFormatter": "esbenp.prettier-vscode",

      "editor.formatOnSave": true,

      "editor.tabSize": 2,

      "editor.detectIndentation": false,

      "editor.insertSpaces": true

    },

    "[jsonc]": {

      "editor.defaultFormatter": "esbenp.prettier-vscode",

      "editor.formatOnSave": true,

      "editor.tabSize": 2,

      "editor.detectIndentation": false,

      "editor.insertSpaces": true

    },

    "tailwindCSS.emmetCompletions": true  // tailwindCSS 사용시에만

}

5. eslint 설치 : npm install —save-dev eslint

 

5-1. eslint 사용 시 필요 —> eslint 설정 파일 생성

< — .eslintrc.js —>

module.exports = {

  root: true,

  parserOptions: {

    ecmaVersion: 2020,

  },

  extends: ['airbnb-base', 'plugin:node/recommended', 'prettier'],

  rules: {

    'import/prefer-default-export': ['off'],

  },

}

 

6.  airbnb-base linting rule 설치

npm install --save-dev eslint-config-airbnb-base eslint-plugin-import

 

  1. npm install --save-dev eslint-config-prettier
  2. npm install --save-dev eslint-plugin-node
  3. < — .eslintrc.js —>

module.exports = {

  extends: ['airbnb-base', 'plugin:node/recommended', 'prettier'],

}

7. prettier 확장자 설치 (+eslint)

 

8. type checking (  // @ts-check   )

 npm install --save-dev typescript

 

9. node환경에서 type checking

npm install --save-dev @types/node(노드에서 주로 사용되는 객체들의 타입정보)

 

10. jsconfig.json

<  jsconfig.json >

{

  "compilerOptions": {

    "strict": true,

    "noImplicitAny": true,

    "noUnusedParameters": true,

    "noUnusedLocals": true,

    "noUncheckedIndexedAccess": true

  },

  "include": ["src/**/*"],

  "exclude": ["node_modules"]

}

+ Recent posts