[알고리즘] 특정 기준으로 리스트 정렬하기 (python) - key=lambda

2022. 3. 27. 14:14·Algorithms 💻/Basic
반응형

요즘 정렬 문제를 많이 풀다보면, 리스트를 특정 기준으로 정렬해야할 때가 많다. 단순히 .sort(), sorted()로의 오름차순 내림차순으로는 풀 수 없는 문제도 많이 만났고, 이럴때는 key=lambda 함수를 사용하면 된다! 

오늘은 이러한 용법에 대해 포스팅 해보도록 하겠다. :) 이 게시글은 여기를 참고하였다. 

 

# key=lambda 용법 

우선 key=lambda 용법은 sorted 함수의 인자로 쓰인다. 그리고 다음과 같이 사용한다. 

# key가 하나일 때 

모든 정렬의 기반은 오름차순 정렬이다. 

ex 1) 리스트의 각 원소를 기준으로 정렬하기 (일반 오름차순) 

참고로 문자열을 다음과 같이 정렬하면 사전순으로 정렬이 된다. 

arr = ['abc', 'bac', 'bca']
sorted(arr, key=lambda x : x)

 

ex 2) 리스트 각 원소의 첫글자를 기준으로 정렬하기

리스트의 각 원소를 x로 받는다고 가정하면 다음과 같이 정렬할 수 있다. 

arr = ['abc', 'bac', 'bca']
sorted(arr, key=lambda x : x[0])

 

ex 3) 리스트 내 요소의 인덱스를 원소의 크기순으로 정렬하기 

즉, 리스트 내 원소를 크기순으로 정렬했을 때의 인덱스가 어떻게 정렬되는지가 필요할 때가 있다. 예를들어 A리스트의 크기 순서대로 똑같이 맞추어 B 리스트를 정렬하고자 할 때는, A 리스트의 인덱스 정렬 정보가 필요할 것이다. 

이때는 다음과 같이 해주면 된다. 

b = [12, 14, 23, 24, 16]
b_idx = sorted(range(len(b)), key = lambda k: b[k]) 

# 여기서 b_idx는 [0, 1, 4, 2, 3]이 된다.

 

 

# key가 두개일 때 

정렬할 때 특정 정렬 기준으로 같을경우, 다른 기준을 적용하고 싶을 때가 있다. 이럴때는 다음과 같이 하면 된다. 

ex1) x[0]를 기준으로 정렬하고 같을 경우 x[1]를 기준으로 정렬하기

arr = ['abb', 'acc', 'bcd']
sorted(arr, key=lambda x : (x[0], x[1]))

 

ex2) x[0]는 내림차순, x[1]는 오름차순을 기준으로 정렬하기

arr = ['abb', 'acc', 'bcd']
sorted(arr, key=lambda x : (-x[0], x[1]))

 

 

# 관련 문제 

1026 보물 https://www.acmicpc.net/problem/1026

1181 단어 정렬 https://www.acmicpc.net/problem/1181

반응형
저작자표시 (새창열림)

'Algorithms 💻 > Basic' 카테고리의 다른 글

[알고리즘] 수학 관련 알고리즘 Code - 에라토스테네스의 체, 유클리드 호제법  (0) 2022.04.28
[알고리즘] 백트래킹(Backtracking)을 알아보자  (0) 2022.04.05
[코테] 자주 쓰이는 Python 기본 함수 정리 (계속 업데이트)  (2) 2022.03.26
[알고리즘] 큐를 이용해 BFS 구현하기 (python)  (0) 2022.03.21
[자료구조] - (2) 스택(Stacks) with Python  (0) 2021.03.11
'Algorithms 💻/Basic' 카테고리의 다른 글
  • [알고리즘] 수학 관련 알고리즘 Code - 에라토스테네스의 체, 유클리드 호제법
  • [알고리즘] 백트래킹(Backtracking)을 알아보자
  • [코테] 자주 쓰이는 Python 기본 함수 정리 (계속 업데이트)
  • [알고리즘] 큐를 이용해 BFS 구현하기 (python)
당니이
당니이
씩씩하게 공부하기 📚💻
  • 당니이
    다은이의 컴퓨터 공부
    당니이
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Achieved 👩🏻 (14)
        • 생각들 (2)
        • TIL (6)
        • Trial and Error (1)
        • Inspiration ✨ (0)
        • 미국 박사 준비 🎓 (1)
      • Computer Vision💖 (39)
        • Basic (9)
        • Video (5)
        • Continual Learning (7)
        • Generative model (2)
        • Domain (DA & DG) (5)
        • Multimodal (8)
        • Multitask Learning (1)
        • Segmentation (1)
        • Colorization (1)
      • RL 🤖 (1)
      • Autonomous Driving 🚙 (11)
        • Geometry (4)
        • LiDAR 3D Detection (1)
        • Trajectory prediction (2)
        • Lane Detection (1)
        • HDmap (3)
      • Linux (15)
      • PyTorch👩🏻‍💻 (10)
      • Linear Algebra (2)
      • Python (5)
      • NLP (10)
        • Article 📑 (1)
      • Algorithms 💻 (22)
        • Basic (8)
        • BAEKJOON (8)
        • Programmers (2)
      • ML (1)
        • 통계적 머신러닝(20-2) (1)
      • SQL (3)
      • 기초금융 💵 (1)
  • 블로그 메뉴

    • 홈
    • About me
  • 링크

    • 나의 소박한 github
    • Naver 블로그
  • 공지사항

  • 인기 글

  • 태그

    Incremental Learning
    백트래킹
    dfs
    Linux
    백준
    리눅스
    CV
    CL
    자료구조
    코딩테스트
    til
    알고리즘
    domain adaptation
    continual learning
    domain generalization
    Python
    NLP
    conda
    pytorch
    LLM
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
당니이
[알고리즘] 특정 기준으로 리스트 정렬하기 (python) - key=lambda
상단으로

티스토리툴바