질문 배경:
파이썬은 처음부터 컬렉션을 정렬하기 위한 내장 도구를 제공했습니다. sort() 메서드와 sorted() 함수는 파이썬의 두 번째 버전에서 도입되었으며, 파이썬 2.4부터는 sorted()가 모든 iterable 객체(리스트 뿐만 아니라)를 정렬하기 위해 도입되었습니다.
문제:
종종 다양한 기준으로 데이터를 정렬해야 하며, 항상 원본 객체를 변경하고 싶지는 않습니다. 초보자는 sort()와 sorted()를 혼동하며 각기 어디에서 사용되는지 이해하지 못하고 정렬 키와 역순에 대해 실수를 합니다.
해결책:
sorted(이터러블 객체, key=None, reverse=False)는 항상 원본을 변경하지 않고 새로운 리스트 객체를 반환합니다.list.sort(key=None, reverse=False)는 리스트를 제자리에서 정렬하고 None을 반환합니다.key는 정렬 기준을 정의하는 함수입니다.reverse=True는 순서를 역으로 변경합니다.문자열 리스트를 길이에 따라 역순으로 정렬하는 예:
words = ['python', 'is', 'strong', 'language'] sorted_words = sorted(words, key=len, reverse=True) print(sorted_words) # ['language', 'python', 'strong', 'is']
주요 특징:
sort() 메서드는 무엇을 반환합니까?
list.sort() 메서드는 리스트 자체를 정렬하고 항상 None을 반환하며, 이는 자주 간과됩니다.
lst = [3, 1, 2] res = lst.sort() print(res) # None print(lst) # [1, 2, 3]
sort()로 튜플을 정렬할 수 있습니까?
안 됩니다, 튜플은 변경 불가능하므로 .sort() 메서드가 없습니다. 정렬을 위해서는 sorted()를 사용하십시오.
tuple_data = (5,2,3) sorted_tuple = sorted(tuple_data) print(sorted_tuple) # [2, 3, 5]
key에 서로 다른 유형을 반환하는 함수를 지정하면 어떻게 됩니까?
반환된 값들이 서로 비교 불가능한 경우(TypeError 예외)가 발생합니다(예: int와 str).
면접에서 길이에 따라 정렬된 리스트를 반환하라고 요청받았지만 후보자가 이렇게 합니다:
lst = ['one', 'elephant'] ans = lst.sort(key=len) print(ans) # None
장점:
단점:
올바른 사용:
lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']
장점:
단점: