reverse, key 사용 가능Nonereverse, key 사용 가능reverse = True 넣으면 역순abs, len 등 기준으로 정렬 가능
주의할 점은 key = abs() 가 아니라 key = abs이다.
lambda와 함께 쓰이는 경우가 많다.
예를들어 첫 번째 단어 기준 정렬하려면 아래와 같이 하면 된다.
`words.sort(key=lambda x: x.split()[0])`
두 가지 이상 기준으로 정렬하게 되면 key에 튜플을 전달한다.
예를들어 두 번째 단어 -> 첫 번째 단어 기준 정렬하려면
`words.sort(key=lambda x: (x.split()[1], x.split()[0]))`
# 1. .sort()와 sorted()의 차이
# .sort(): 리스트에만 사용 가능하며 원본 리스트를 직접 정렬, 반환값은 None
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print("1. .sort() 결과 (오름차순):", numbers) # [1, 2, 5, 5, 6, 9]
# sorted(): 모든 iterable에서 사용 가능하며 원본 데이터를 유지, 정렬된 데이터를 리스트 형태로 반환
numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers)
print("2. sorted() 결과 (오름차순):", sorted_numbers) # [1, 2, 5, 5, 6, 9]
print(" 원본 리스트 유지:", numbers) # [5, 2, 9, 1, 5, 6]
# -------------------------------------------------
# 2. sorted()는 리스트 외에도 사용 가능
# 튜플 정렬
tuple_data = (5, 2, 9, 1, 5, 6)
sorted_tuple = sorted(tuple_data)
print("3. 튜플 정렬 결과:", sorted_tuple) # [1, 2, 5, 5, 6, 9]
# 문자열 정렬 (알파벳 순)
string_data = "python"
sorted_string = sorted(string_data)
print("4. 문자열 정렬 결과:", sorted_string) # ['h', 'n', 'o', 'p', 't', 'y']
# 딕셔너리 정렬 (키 기준)
dict_data = {"b": 2, "a": 1, "c": 3}
sorted_dict_keys = sorted(dict_data)
print("5. 딕셔너리 키 정렬 결과:", sorted_dict_keys) # ['a', 'b', 'c']
# 딕셔너리 정렬 (값 기준)
dict_data = {"b": 2, "a": 1, "c": 3}
sorted_dict_items = dict(sorted(dict_data.items(), key=lambda item: item[1]))
print("딕셔너리 값 정렬 결과:", sorted_dict) # {'a': 1, 'b': 2, 'c': 3}
# -------------------------------------------------
# 3. .sort()는 리스트에만 사용 가능 (다른 iterable에 사용하면 오류 발생)
try:
tuple_data.sort() # 튜플에 .sort()를 사용하려고 하면 AttributeError 발생
except AttributeError as e:
print("6. 튜플에서 .sort() 오류 발생:", e)
try:
string_data.sort() # 문자열에 .sort()를 사용하려고 하면 AttributeError 발생
except AttributeError as e:
print("7. 문자열에서 .sort() 오류 발생:", e)
# -------------------------------------------------
# 4. reverse와 key 매개변수 활용 예시
# .sort()에서 reverse 사용 (내림차순 정렬)
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort(reverse=True)
print("8. .sort() 결과 (내림차순):", numbers) # [9, 6, 5, 5, 2, 1]
# sorted()에서 reverse 사용 (내림차순 정렬)
numbers = [5, 2, 9, 1, 5, 6]
sorted_desc = sorted(numbers, reverse=True)
print("9. sorted() 결과 (내림차순):", sorted_desc) # [9, 6, 5, 5, 2, 1]
# .sort()에서 key 사용 (절댓값 기준)
numbers_with_negatives = [-5, -2, 9, -1, 5, 6]
numbers_with_negatives.sort(key=abs)
print("10. .sort() 결과 (절댓값 기준):", numbers_with_negatives) # [-1, -2, 5, -5, 6, 9]
# sorted()에서 key 사용 (절댓값 기준)
numbers_with_negatives = [-5, -2, 9, -1, 5, 6]
sorted_by_abs = sorted(numbers_with_negatives, key=abs)
print("11. sorted() 결과 (절댓값 기준):", sorted_by_abs) # [-1, -2, 5, -5, 6, 9]
# 문자열 정렬: 길이 기준
words = ["banana", "apple", "kiwi", "cherry", "mango"]
words.sort(key=len)
print("12. 문자열 길이 기준 정렬 (.sort()):", words) # ['kiwi', 'mango', 'apple', 'banana', 'cherry']
sorted_by_length = sorted(words, key=len)
print("13. 문자열 길이 기준 정렬 (sorted()):", sorted_by_length) # ['kiwi', 'mango', 'apple', 'banana', 'cherry']
# 복합 조건: 두 번째 글자 기준 + 내림차순
words = ["banana", "apple", "kiwi", "cherry", "mango"]
sorted_by_second_letter_desc = sorted(words, key=lambda x: x[1], reverse=True)
print("14. 복합 조건 (두 번째 글자 기준 내림차순):", sorted_by_second_letter_desc)
# ['kiwi', 'cherry', 'apple', 'mango', 'banana']
# 첫 번째 단어 기준 정렬
mixed = ["10 apples", "2 bananas", "30 cherries", "1 mango"]
sorted_by_number = sorted(mixed, key=lambda x: int(x.split()[0]))
print("15. key=lambda (숫자 기준):", sorted_by_number)
# ['1 mango', '2 bananas', '10 apples', '30 cherries']
# 여러 기준 정렬: 두 번째 단어 -> 첫 번째 단어
phrases = ["cat2 apple banana", "cat1 banana apple", "dog3 apple orange", "cat3 apple"]
phrases.sort(key=lambda x: (x.split()[1], x.split()[0]))
print("8. 여러 기준 정렬:", phrases)
# ['cat3 apple', 'cat2 apple banana', 'cat1 banana apple', 'dog3 apple orange']
# -------------------------------------------------
# 정리
# - .sort(): 리스트 전용, 원본을 직접 정렬
# - sorted(): 모든 iterable에서 사용 가능, 새로운 정렬된 객체 반환
# - key와 reverse 매개변수는 모두 지원하며, 다양한 정렬 기준과 방향 설정 가능