[Python] sorted()와 sort()

yerim·2023년 3월 14일
0

파이썬 기본 정리

목록 보기
8/11

파이썬에서 정렬하는 방법에는 2가지가 있다.
sort() 함수와 sorted() 함수

1. sort와 sorted의 차이

sort( )

<list>.sort([key = <function>], [reverse = True|False])
  • 리스트형의 메서드
  • 리스트 자료형에서만 사용 가능
  • 원래의 리스트가 변경됨
  • 아무것도 반환하지 않음
a = [5, 2, 3, 1, 4]
a.sort()              # sort 함수로 정렬
print(a)

sorted( )

sorted(정렬할 데이터, [key = <function>], [reverse = True|False])
  • 파이썬의 표준 내장함수
  • 모든 iterable한 객체에서 사용 가능(리스트(list), 튜플(tuple), 세트(set), 문자열(string))
  • 원래의 리스트에는 변화 X
  • 정렬된 새로운 리스트를 반환
  • 입력 인자의 자료형에 상관없이 list 로 반환
a = [5, 2, 3, 1, 4]
print(sorted(a))    # sorted 함수로 정렬
# [1, 2, 3, 4, 5]

print(a)            # sorted 함수는 기존 리스트에 영향을 주지 않음
# [5, 2, 3, 1, 4]


2. key 함수

  • 특정 값(key)을 기준으로 정렬하고자 할 때 사용
  • 정렬을 목적으로 하는 함수를 key 값으로 넣는다.
  • 기본은 오름차순 정렬
  • lambda 함수를 이용할 수도 있다. (ex. key = lambda x : x[0])
student_tuples = [
    # name, grade, age
    ('john', 'A', 15),
    ('tony', 'B', 12),
    ('dave', 'C', 10),
    ('happy', 'A', 12)
]

print(sorted(student_tuples))   # key 값이 없을 경우, 가장 첫 번째를 기준으로 정렬
# [('dave', 'C', 10), ('happy', 'A', 12), ('john', 'A', 15), ('tony', 'B', 12)]


print(sorted(student_tuples, key=lambda x: x[2]))   # x[2] 즉, age를 기준으로 오름차순 정렬
# [('dave', 'C', 10), ('tony', 'B', 12), ('happy', 'A', 12), ('john', 'A', 15)]


## 특정 key값을 기준으로 내림차순으로 정렬할 경우
## 원소 앞에 마이너스 부호(-) 를 붙이면 내림차순 정렬
print(sorted(student_tuples, key=lambda x: -x[2]))   # x[2] 즉, age를 기준으로 내림차순 정렬
# [('john', 'A', 15), ('tony', 'B', 12), ('happy', 'A', 12), ('dave', 'C', 10)]


## key 가 여러개일 경우
## 튜플 형식으로 람다식을 세워서 정렬한다.
print(sorted(student_tuples, key=lambda x: (x[2], x[1])))   # x[2](age), x[1](grade) 순으로 오름차순 정렬
# [('dave', 'C', 10), ('happy', 'A', 12), ('tony', 'B', 12), ('john', 'A', 15)]


## age순으로 내림차순 정렬, grade 순으로 오름차순 정렬
print(sorted(student_tuples, key=lambda x: (-x[2], x[1])))
# [('john', 'A', 15), ('happy', 'A', 12), ('tony', 'B', 12), ('dave', 'C', 10)]


3. operator 모듈 함수

  • operater 모듈에는 itemgetter() 함수를 사용하여 더 간단하고 빠르게 정렬할 수 있다.
from operator import itemgetter, attrgetter
student_tuples = [
    # name, grade, age
    ('john', 'A', 15),
    ('tony', 'B', 12),
    ('dave', 'C', 10),
    ('happy', 'A', 12)
]


print(sorted(student_tuples, key=itemgetter(1)))    # grade를 기준으로 오름차순 정렬
# [('john', 'A', 15), ('happy', 'A', 12), ('tony', 'B', 12), ('dave', 'C', 10)]


4. 오름차순과 내림차순

  • sort 함수와 sorted 함수는 기본적으로 오름차순 정렬이다.
  • reverse=True 로 내림차순을 정렬을 할 수 있다.
a = ["b", "e", "a", "d", "c", "f"]
print(sorted(a, reverse=True))
# ['f', 'e', 'd', 'c', 'b', 'a']

a.sort(reverse=True)
print(a)
# ['f', 'e', 'd', 'c', 'b', 'a']


📌 문자열 자체를 정렬하려면?

  • sorted() 함수를 사용하여 정렬할 수 있다.
  • 이때 정렬된 문자열은 list 형태로 반환된다.
  • 정렬된 리스트를 join 함수를 사용하여 하나의 문자열로 합친다.
  • sort 함수는 리스트 자료형만 정렬할 수 있음을 기억하자!!
string = "beadcf"
sorted_s =sorted(string)    # sorted 함수로 문자열 정렬
print(sorted_s)
# ['a', 'b', 'c', 'd', 'e', 'f']
print("".join(sorted_s))
# abcdef
profile
hello!

0개의 댓글