HOWTO · Python

파이썬에서 sort()와 sorted()의 차이점

Python에서 정렬과 정렬의 차이점에 대해 알아보기

이 페이지의 내용

정렬은 컴퓨터 과학 세계에서 매우 중요한 주제입니다. 병합 정렬, 빠른 정렬, 버블 정렬, 선택 정렬, 삽입 정렬 등과 ​​같이 데이터 배열을 정렬하는 데 사용할 수 있는 많은 알고리즘이 있습니다. 이러한 모든 알고리즘은 시간 및 공간 복잡성이 다르지만 일반적으로 병합 및 빠른 정렬이 가장 좋은 것으로 간주됩니다. 정렬은 매우 일반적인 작업이므로 프로그래밍 언어에는 데이터를 정렬하는 내장 함수가 포함되어 있습니다. 그리고 파이썬도 그 중 하나입니다.

그러나 Python에는 sortsorted라는 두 가지 정렬 기능이 있습니다. 이 기사에서는 이 두 가지 정렬 기능의 차이점에 대해 알아볼 것입니다.

Python의 sort() 함수

Python의 sort 함수는 인덱스의 값을 교환하여 목록을 제자리에 정렬합니다. 목록에 대해 sort 함수를 호출하면 새 목록이 반환되지 않습니다. 오히려 동일한 목록이 정렬됩니다. sort() 함수를 사용하여 목록을 정렬할 수 있습니다.

예제는 다음 코드를 참조하십시오.

myList = [1, 5, 2, 10, 33, 3, 9]
print(myList)
myList.sort()
print(myList)

출력:

[1, 5, 2, 10, 33, 3, 9]
[1, 2, 3, 5, 9, 10, 33]

보시다시피 sort 함수를 호출할 때 동일한 목록이 정렬되었습니다.

목록을 역순으로 정렬하려면 reverse 인수를 True로 설정하여 목록을 정렬할 수도 있습니다.

동일한 내용은 다음 코드를 참조하십시오.

myList = [1, 5, 2, 10, 33, 3, 9]
print(myList)
myList.sort(reverse=True)
print(myList)

출력:

[1, 5, 2, 10, 33, 3, 9]
[33, 10, 9, 5, 3, 2, 1]

sort 함수에는 정렬을 위해 고려할 값을 정의하는 데 사용할 수 있는 key라는 또 다른 매개변수가 있습니다. 예를 들어 쌍 목록이 있고 두 번째 값을 고려하여 쌍을 정렬하려는 경우 key 매개변수를 사용하여 이를 수행할 수 있습니다.

예제는 다음 코드를 참조하십시오.

def secondElement(element):
    return element[1]


data = [(1, 2), (3, 4), (5, 3), (6, 6), (3, 0), (10, 1)]
print("Before sorting:", data)
data.sort(key=secondElement)
print("After sorting:", data)

출력:

Before sorting: [(1, 2), (3, 4), (5, 3), (6, 6), (3, 0), (10, 1)]
After sorting: [(3, 0), (10, 1), (1, 2), (5, 3), (3, 4), (6, 6)]

보시다시피 목록은 쌍 내부의 두 번째 숫자를 기준으로 정렬됩니다.

동일한 접근 방식을 사용하여 사전 목록을 정렬할 수도 있습니다. 동일한 내용은 다음 코드를 참조하십시오.

def byName(entry):
    return entry["name"]


def byAge(entry):
    return entry["age"]


def byRank(entry):
    return entry["rank"]


data = [
    {
        "name": "Vaibhav",
        "age": 18,
        "rank": 1,
    },
    {
        "name": "Steve",
        "age": 24,
        "rank": 5,
    },
    {
        "name": "Olive",
        "age": 12,
        "rank": 2,
    },
    {
        "name": "Allison",
        "age": 17,
        "rank": 4,
    },
]

print("Original Data")
print(data)
print("Sorted by Name")
data.sort(key=byName)
print(data)
print("Sorted by Age")
data.sort(key=byAge)
print(data)
print("Sorted by Rank")
data.sort(key=byRank)
print(data)

출력:

Original Data
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]
Sorted by Name
[{'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}]
Sorted by Age
[{'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Sorted by Rank
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Steve', 'age': 24, 'rank': 5}]

보시다시피 사전 목록 내의 항목은 우리가 정의한 키를 기반으로 정렬됩니다.

Python의 sorted() 함수

sort 기능과 마찬가지로 sorted도 목록을 정렬하는 데 사용됩니다. 그러나 sorted 함수는 동일한 목록을 제자리에 정렬하는 대신 새 목록을 반환합니다. 이것이 두 기능의 주요 차이점입니다. 예를 들어 이것을 이해합시다.

myList = [1, 5, 2, 10, 33, 3, 9]
print("Before called sorted():", myList)
newList = sorted(myList)
print("After called sorted():", myList)
print("New list:", newList)

출력:

Before called sorted(): [1, 5, 2, 10, 33, 3, 9]
After called sorted(): [1, 5, 2, 10, 33, 3, 9]
New list: [1, 2, 3, 5, 9, 10, 33]

보시다시피 sorted 함수에 전달한 목록은 그대로 유지되고 newList 변수 안에 저장된 새 목록이 반환되었습니다. 두 매개변수, 즉 reversekey도 이 기능에서 사용할 수 있습니다. 두 가지를 사용하여 역순으로 정렬된 목록을 얻고 사용자 지정 키를 기반으로 목록을 정렬할 수 있습니다. 다음 예제에서는 동일한 내용을 보여 줍니다.

reverse 매개변수의 예.

myList = [1, 5, 2, 10, 33, 3, 9]
print("Before called sorted():", myList)
newList = sorted(myList, reverse=True)
print("After called sorted():", myList)
print("New list:", newList)

출력:

Before called sorted(): [1, 5, 2, 10, 33, 3, 9]
After called sorted(): [1, 5, 2, 10, 33, 3, 9]
New list: [33, 10, 9, 5, 3, 2, 1]

그리고 key 매개변수의 예입니다.

def byName(entry):
    return entry["name"]


def byAge(entry):
    return entry["age"]


def byRank(entry):
    return entry["rank"]


data = [
    {
        "name": "Vaibhav",
        "age": 18,
        "rank": 1,
    },
    {
        "name": "Steve",
        "age": 24,
        "rank": 5,
    },
    {
        "name": "Olive",
        "age": 12,
        "rank": 2,
    },
    {
        "name": "Allison",
        "age": 17,
        "rank": 4,
    },
]

print("Original Data")
print(data)
print("Sorted by Name")
nameSorted = sorted(data, key=byName)
print(nameSorted)
print("Sorted by Age")
ageSorted = sorted(data, key=byAge)
print(ageSorted)
print("Sorted by Rank")
rankSorted = sorted(data, key=byRank)
print(rankSorted)
print("Data after all operations")
print(data)

출력:

Original Data
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]
Sorted by Name
[{'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}]
Sorted by Age
[{'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Sorted by Rank
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Data after all operations
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]