Python 정렬
list.sort()메서드와sorted()함수를 제공
기본 정렬
sorted([5, 2, 3, 1, 4])
# 결과: [1, 2, 3, 4, 5]
a = [5, 2, 3, 1, 4]
a.sort()
a
# 결과: [1, 2, 3, 4, 5]
Key
- 각 요소에 대해 호출할 함수 지정
str.casefold:.lower보다 폭넓은 소문자 변환 기능 제공
sorted("This is a test string".split(), key=str.casefold)
# 결과: ['a', 'is', 'string', 'test', 'This']
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
sorted(student_tuples, key=lambda student: student[2])
# 결과: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
operator
operator모듈의itemgetter()와attrgetter()활용attrgetter: 객체 속성을 기준으로 호출
from operator import itemgetter, attrgetter
sorted(student_tuples, key=itemgetter(2))
# 결과: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
다중 수준 정렬도 가능합니다.
sorted(student_tuples, key=itemgetter(1, 2))
# 결과: [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
내림차순 정렬
reverse매개변수 사용
sorted(student_tuples, key=itemgetter(2), reverse=True)
# 결과: [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
.sort()와 sorted()의 차이점
- 작동 방식
.sort()- 리스트 객체에서만 사용 가능
- 리스트를 제자리에서 정렬
- 원본 리스트 변경
sorted()- 모든 이터러블에서 작동
- 정렬된 새로운 리스트를 반환
- 원본 데이터는 변경되지 않음
- 반환값:
.sort()None을 반환- 반환하는 값 없이 원본 리스트 수정
sorted()- 정렬된 새로운 리스트를 반환
- 사용 범위
.sort(): 리스트 전용sorted(): 튜플, 딕셔너리, 문자열 등 이터러블 데이터에 사용 가능
Set
- 순서가 없고 고유한 값
- mutable 객체
- dictionary와 비슷하지만, key가 없이 값만 존재
생성
set(): 이터러블 객체 변환- 순서, 중복 제거
메서드
in
in/not in
원소 추가
.add()
k = {100, 105}
k.add(50)
# {105, 50, 100}
update
- 여러데이터를 한번에 추가할 때 사용
k = {1, 2, 3}
k.update([3, 4, 5])
# {1, 2, 3, 4, 5}
원소 제거
.remove(): 원소를 제거- 없으면 KeyError 발생
discard(): 없어도 에러발생하지 않음
k = {1, 2, 3}
k.remove(3)
# {1, 2}
k = {1, 2, 3}
k.discard(3)
# {1, 2}
연산자
| - 합집합 연산자
& : 교집합 연산자
- : 차집합 연산자
^ : 대칭차집합 연산자(합집합 - 교집합)
연산메소드
union: 합집합intersection: 교집합difference: 차집합symmetric_difference: 대칭차집합 연산자(합집합 - 교집합)issubset: 부분집합 여부 확인isdisjoint: 교집합 여부