Link Search Menu Expand Document
LIST, TUPLE, DICT 정렬
Table of contents
  1. sort()
  2. sorted()
  3. key를 이용한 정렬
  4. key - lambda를 이용한 정렬
    1. lambda 람다
    2. list 정렬
    3. tuple 정렬
    4. dict 정렬
  5. Ref.

파이썬에서 정렬이 필요할 때는 sort()sorted() 함수를 이용하면 쉽게 리스트의 원소를 정렬할 수 있다. 만약 리스트가 아닌 tuple, dict와 같은 자료형을 정렬하고 싶다면 그 때는 sort, sorted 함수에 파라마터 key를 이용해 정렬할 수 있다.

sort()

  • sort 함수를 이용하면 리스트의 원소를 정렬할 수 있다.
  • 이 때, sort 함수는 원본의 순서를 변경한다.
  • 기본 값은 reverse=False로 오름차순으로 정렬한다. 만약 내림차순으로 정렬하고 싶다면 reverse=True 를 이용하면 된다.
a = [3, 2, 1, 4, 5]
a.sort()
print(a) # [1, 2, 3, 4, 5]

b = [3, 2, 1, 4, 5]
b.sort(reverse=True)
print(b) # [5, 4, 3, 2, 1]

sorted()

  • sorted 함수도 sort 함수처럼 리스트의 원소를 정렬할 때 사용한다.
  • sorted 함수는 sort 함수와 다르게 원본의 순서를 변경하지 않는다.
  • 기본 값은 reverse=False로 오름차순으로 정렬한다. 만약 내림차순으로 정렬하고 싶다면 reverse=True 를 이용하면 된다.
a = [3, 2, 1]
b = sorted(a)

print(a) # [3, 2, 1]
print(b) # [1, 2, 3]

key를 이용한 정렬

  • sort와 sorted 함수에 파라미터 key값을 이용해 이를 기준으로 정렬할 수 있다.
  • key값을 기준으로 기본값인 오름차순으로 정렬한다.

원소의 길이를 기준으로 정렬

a = ["hello", "my", "name", "is", "dowon"]
a.sort(key=len)

print(a)
# ['my', 'is', 'name', 'hello', 'dowon']

key - lambda를 이용한 정렬

key 값에는 lambda를 이용할 수 있다. lambda는 tuple, dict 자료형을 정렬할 때 효과적이지만, 리스트 자료형을 정렬할 때도 사용할 수 있다. lambda를 이용한 정렬을 알아보기 전, 간단히 lambda를 정리하고 넘어가려고 한다.

lambda 람다

  • lambda 함수는 식 형태로 되어 있어 람다 표현식이라고 부른다.
  • 람다 표현식은 이름이 없는 함수를 만들기 때문에 익명 함수라고도 한다.
  • lambda 람다를 이용하면 함수를 간편하게 작성할 수 있어 다른 함수의 인수로 넣을 때 주로 사용한다.

x를 전달받아서 10을 더해서 리턴하는 함수

plus_ten = lambda x: x + 10
plus_ten(1) # 11

list 정렬

lambda를 이용해 알파벳 기준으로 정렬

a = ["hello", "my", "name", "is", "dowon"]
a.sort(key=lambda x:x[0])
print(a)

# ['dowon', 'hello', 'is', 'my', 'name']

리스트 안의 두 번째 리스트의 최댓값을 기준으로 정렬

mylist = [ ['a', [5, 6, 7]], ['b', [2, 3, 4]], ['c', [1, 2, 3]] ]
a.sort(key=lambda x: max(x[1]))
print(a)

# [['c', [1, 2, 3]], ['b', [2, 3, 4]], ['a', [5, 6, 7]]]

tuple 정렬

숫자를 기준으로 먼저 정렬하고, 숫자가 같다면 그때는 단어의 알파벳 순으로 정렬

a = [("hello",0), ("my",5), ("name",4), ("is",10), ("dowon", 10)]
a.sort(key=lambda x:(x[1], x[0]))
print(a)

# [('hello', 0), ('name', 4), ('my', 5), ('dowon', 10), ('is', 10)]

(name, grade, age) 순으로 저장되어 있는 튜플을 age를 기준으로 오름차순 정렬

student_tuples = [
		('john', 'A', 15),
		('jane', 'B', 12),
		('dave', 'B', 10),
]

sorted(student_tuples, key=lambda student: student[2])
# sort by age
# [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

(name, grade, age) 순으로 저장되어 있는 튜플을 age를 기준으로 내림차순 정렬

  • key 기준이 int형인 경우 key값에 마이너스(-)를 붙이면 내림차순으로 정렬할 수 있다
student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
]

sorted(student_tuples, key=lambda student: -student[2])
# [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

dict 정렬

key값을 기준으로 정렬

student_dict = {'john':15, 'jane':12, 'dave':17}
sorted(student_dict.items(), key=lambda student: student[0])
# [('dave', 17), ('jane', 12), ('john', 15)]

value값을 기준으로 정렬

student_dict = {'john':15, 'jane':12, 'dave':17}
sorted(student_dict.items(), key=lambda student: student[1])
# [('jane', 12), ('john', 15), ('dave', 17)]

Ref.


Page last modified: Feb 5 2021 at 02:02 PM.