다차원 리스트의 정렬이나 딕셔너리의 value 기준 정렬 등에 람다 함수를 사용하게 될 일이 많은데, 알음알음 남의 코드 보면서 알게 되어 아무생각 없이 람다 함수를 사용하다가, 한번 개념을 정리해 보는 것이 좋을듯 하여 남겨본다.

 

람다 함수란?

파이썬에서 람다 함수는 lambda 키워드를 사용하여 간단하게 익명 함수를 만드는 방법이다. 주로 한 줄로 표현할 수 있는 간단한 함수에 유용하게 사용된다. 내가 처음 람다 함수를 이해한 방식은 수학에서 집합을 나타낼 때, S = { x | ... } 로 시작하는 문법과 거의 동일하다고 이해하고 사용했다. 람다 함수는 일반 함수처럼 이름을 가지지 않고, 선언과 동시에 사용된다. 람다 함수의 기본 문법을 보면 다음과 같다.

# 람다 함수 기본 문법
lambda arg1, arg2: return_value

# 두 숫자를 더하는 람다 함수의 예시
add = lambda x, y: x + y
print(add(5, 3)) # 출력: 8

 

람다 함수로 리스트 정렬하기

람다 함수는 리스트를 특정 조건에 따라 정렬할 때 매우 유용하다. 예를 들어, 다중 리스트를 특정 인덱스 기준으로 정렬하려고 할 때 사용할 수 있다. 예를 들어 학생들의 이름과 점수 리스트가 있을 때, 이 리스트를 점수 기준으로 정렬하려면 람다 함수를 활용할 수 있다.

students = [("철수", 85), ("민수", 75), ("범수", 90)]

# 점수를 기준으로 오름차순 정렬
sorted_students = sorted(students, key=lambda x: x[1])
print(sorted_students)
# 출력: [("민수", 75), ("철수", 85), ("범수", 90)]

# 점수를 기준으로 내림차순 정렬
sorted_students_reverse = sorted(students, key=lambda x: x[1], reverse=True)
print(sorted_students_reverse)
# 출력: [("범수", 90), ("철수", 85), ("민수", 75)]

여기서 key=lambda x: x[1] 부분은 x[1] 값인 점수 기준으로 정렬하라는 의미이다.

 

딕셔너리를 value 기준으로 정렬하기

딕셔너리는 for 문에 넣어 반복문을 돌리면 key를 기준으로 돌게 된다. 그런데 key가 아니라 value를 기준으로 무언가 하고 싶을 때가 많은데, value를 기준으로 정렬할 때에도 람다 함수를 사용하면 편리하다.

scores = {"철수": 85, "민수": 75, "범수": 90}

# value 기준으로 정렬하기
sorted_scores = dict(sorted(scores.items(), key=lambda x: x[1]))
print(sorted_scores)
# 출력: {'민수': 75, '철수': 85, '범수': 90}

여기서 sorted(scores.items(), key=lambda x: x[1]) 부분은 딕셔너리의 (key, value) pair를 리스트로 변환한 후, value를 기준으로 정렬한 것이다. 마지막에 dict()로 감싸서 다시 딕셔너리 형태로 변환한 것이다.

 

리스트 필터링하기

람다 함수는 filter()와 함께 특정 조건을 만족하는 요소만 걸러낼 때도 유용하다. 예를 들어 숫자 리스트에서 짝수만 걸러내고 싶다면 다음과 같이 할 수 있다.

numbers = [1, 2, 3, 4, 5, 6]

# 짝수만 필터링하기
even_numbers = list(filter(lambda x: x%2 == 0, numbers))
print(even_numbers)
# 출력: [2, 4, 6]

 

마무리

람다 함수는 파이썬에서 간단한 함수를 작성할 때 매우 유용한 도구이다. 리스트나 딕셔너리의 특정 기준에 따라 정렬하거나, 특정 조건에 맞는 요소만 필터링할 때 간결하게 사용할 수 있다.

728x90

'🔨 개발 > 📚 개발지식모음집' 카테고리의 다른 글

YAML 파일이란?  (1) 2024.09.13
20240903 requirements.txt 문제  (0) 2024.09.03
20240808  (0) 2024.08.08
20240807  (0) 2024.08.07
20240806  (0) 2024.08.06

YAML(YAML Ain't Markup Language) - 사람이 읽기 쉬운 데이터 형식

이름부터 심상치 않은 이녀석... 웹 프론트 개발을 할 때는 자주 만나지는 않았지만, 이미지 생성 AI 모델인 stable diffusion 구동을 위해 이런저런 작업을 하던 도중 YAML 파일의 내용을 바탕으로 아나콘다 가상환경을 생성할 일이 있었다.(requirements.txt 와 비슷한 역할로) 그렇게 접하게 된 YAML 파일. 꼭 가상환경의 구성 외에도 이런저런 config 용도로 많이 사용되는 듯 한데, 이 파일은 어떤 형식인지 궁금해서 찾아보고 정리하게 되었다.

YAML은 사람이 읽기 쉽고 간결한 데이터 직렬화 형식이다. 다른 데이터 형식인 XML이나 JSON과 같은 용도로 사용되지만, 가독성이 높고 작성이 간편한 점에서 차별화된다. YAML은 주로 애플리케이션 설정 파일, 데이터 파일, 구성 정보 등을 저장하는 데 자주 사용된다.

 

1. YAML의 기본 개념

YAML은 데이터를 계층 구조로 표현하며, 들여쓰기를 사용하여 데이터 간의 관계를 나타낸다. 예를 들어, JSON에서는 중괄호({})를 사용하여 데이터를 구조화하지만, YAML에서는 들여쓰기만으로 같은 구조를 나타낼 수 있다. YAML은 프로그래머뿐만 아니라 비전문가도 쉽게 이해할 수 있도록 설계되었다. 구문이 간단하고 사람이 읽기 쉽게 구성되어 있어 설정 파일이나 데이터를 작성할 때 유용하다.

# 서버 설정 정보
server:
  name: my-server
  port: 8080
  enabled: true

# 데이터베이스 설정 정보
database:
  host: localhost
  username: admin
  password: secret
  tables:
    - users
    - products
    - orders

이 예시는 서버와 데이터베이스 설정을 담고 있다. 각 항목은 들여쓰기를 통해 계층 구조를 표현하며, 리스트는 - 기호를 사용하여 정의된다.

 

2. YAML의 주요 특징

  1. 간결한 구문: YAML은 데이터 간의 구조를 들여쓰기로 표현하기 때문에 중괄호나 대괄호가 필요없다. 이는 XML이나 JSON에 비해 훨씬 간결한 표현을 가능하게 한다.
  2. 높은 가독성: YAML은 사람이 읽고 쓰기 쉽게 설계되었다. 데이터가 중첩되거나 복잡해도 들여쓰기를 통해 직관적으로 구조를 파악할 수 있다.
  3. 유연한 데이터 표현: YAML은 다양한 데이터 타입을 지원한다. 문자열, 숫자, 리스트, 딕셔너리 등 프로그래밍에서 자주 사용하는 구조를 YAML에서도 간단하게 표현할 수 있다.
  4. 주석 지원: YAML 파일에서 주석을 사용할 수 있어, 코드 설명이나 주석을 통해 문서화 작업을 쉽게 할 수 있다. 주석은 # 기호로 시작하며, 주석 뒤의 내용은 무시된다.

 

3. YAML 파일의 장점

  1. 쉬운 유지보수: YAML은 설정 파일을 읽고 수정해야 하는 사용자에게 매우 편리한 형식입니다. 코드의 구조를 쉽게 이해할 수 있으며, 주석을 추가해 설명을 더할 수 있어 유지보수가 용이합니다.
  2. 데이터의 직관적인 표현: YAML은 데이터를 시각적으로 직관적으로 표현할 수 있다. 특히, 복잡한 계층구조를 표현할 때도 들여쓰기를 사용해 쉽게 구조를 파악할 수 있다.
  3. 다양한 프로그래밍 언어와의 호환성: YAML은 파이썬, 자바, C#, PHP 등 다양한 프로그래밍 언어에서 지원된다. 대부분의 언어에는 YAML 파서를 쉽게 사용할 수 있는 라이브러리가 존재한다. 파이썬에서는 PyYAML 같은 라이브러리를 통해 YAML 파일을 쉽게 파싱하고 데이터를 처리할 수 있다.

 

4. YAML 사용 예시

  1. 애플리케이션 설정 파일: YAML은 많은 소프트웨어에서 설정 파일로 사용된다. 내가 처음 경험한 YAML 파일도 그러하다. 예를 들어, Python의 Django, Java의 Spring Boot 같은 프레임워크는 설정 파일로 YAML을 사용할 수 있다. 환경 설정이나 데이터베이스 연결 정보 등을 YAML로 저장하여 애플리케이션을 유연하게 구성할 수 있다.
  2. CI/CD 파이프라인: 지속적 통합 및 배포(CI/CD) 도구인 Jenkins, GitLab CI, CircleCI 등에서 YAML을 사용해 빌드 및 배포 파이프라인을 정의할 수 있다. 예를 들어, GitLab CI에서 .gitlab-ci.yml 파일을 사용하여 프로젝트의 빌드 및 테스트 과정을 정의할 수 있다.

 

5. YAML vs JSON

사실 YAML과 JSON은 매우 비슷한 역할을 한다. 두 형식 모두 데이터를 직렬화하기 위한 것이며, 계층 구조를 지원한다. 그러나 YAML은 JSON보다 가독성에 더 중점을 두고 있다. JSON에서는 {, }, : 같은 구분 기호를 많이 사용하지만, YAML은 들여쓰기를 사용하여 이러한 기호를 생략할 수 있다. YAML을 한 번 이해하면 복잡한 데이터 구조도 간단하게 표현할 수 있으니, 잘 숙지해서 사용하면 좋을 듯 하다.

728x90

'🔨 개발 > 📚 개발지식모음집' 카테고리의 다른 글

파이썬 람다 함수 사용법 정리  (2) 2024.11.04
20240903 requirements.txt 문제  (0) 2024.09.03
20240808  (0) 2024.08.08
20240807  (0) 2024.08.07
20240806  (0) 2024.08.06

공유받은 프로젝트 내에서 pip install -r requirements.txt 를 이용해서 모듈을 설치했는데 main.py를 실행시키면 해당 모듈을 찾을 수 없다고 나오고, 결국 하나하나 pip install로 설치해야 하는 문제 발생

728x90

'🔨 개발 > 📚 개발지식모음집' 카테고리의 다른 글

파이썬 람다 함수 사용법 정리  (2) 2024.11.04
YAML 파일이란?  (1) 2024.09.13
20240808  (0) 2024.08.08
20240807  (0) 2024.08.07
20240806  (0) 2024.08.06

JWT를 어디에 보관해야 하는지 논란 -> 일단 나는 local storage로 개발

728x90

'🔨 개발 > 📚 개발지식모음집' 카테고리의 다른 글

파이썬 람다 함수 사용법 정리  (2) 2024.11.04
YAML 파일이란?  (1) 2024.09.13
20240903 requirements.txt 문제  (0) 2024.09.03
20240807  (0) 2024.08.07
20240806  (0) 2024.08.06

ray casting algorithm: 점과 다각형이 존재할 때, 점이 다각형 내부에 존재하는지 외부에 존재하는지를 빠르게 검사. 점에서 다각형을 향한(정확한 기울기를 정하는 것은 상황에 따라 유연하게) 반직선을 그었을 때, 그 반직선과 다각형의 교점이 홀수개면 내부, 짝수개면 외부에 존재.

728x90

'🔨 개발 > 📚 개발지식모음집' 카테고리의 다른 글

파이썬 람다 함수 사용법 정리  (2) 2024.11.04
YAML 파일이란?  (1) 2024.09.13
20240903 requirements.txt 문제  (0) 2024.09.03
20240808  (0) 2024.08.08
20240806  (0) 2024.08.06

1. textarea의 focus 이벤트

 

2. blur 이벤트와 click이벤트 순서 정리

포스팅: https://luceeverde.tistory.com/entry/blur-이벤트와-click-이벤트-발생-순서-문제

 

 

3. setTimeout()을 이용한 디바운싱 구현

 

4. JWT를 이용한 로그인 기능 구현 - JWT 개념정리 + 어떻게 사용하는지 정리

728x90

'🔨 개발 > 📚 개발지식모음집' 카테고리의 다른 글

파이썬 람다 함수 사용법 정리  (2) 2024.11.04
YAML 파일이란?  (1) 2024.09.13
20240903 requirements.txt 문제  (0) 2024.09.03
20240808  (0) 2024.08.08
20240807  (0) 2024.08.07

+ Recent posts