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

Vaibhav Vaibhav 2023년1월30일
  1. Python의 sort() 함수
  2. Python의 sorted() 함수
파이썬에서 sort()와 sorted()의 차이점

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

그러나 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}]
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

관련 문장 - Python Sorting