파이썬에서 sort()와 sorted()의 차이점
정렬은 컴퓨터 과학 세계에서 매우 중요한 주제입니다. 병합 정렬, 빠른 정렬, 버블 정렬, 선택 정렬, 삽입 정렬 등과 같이 데이터 배열을 정렬하는 데 사용할 수 있는 많은 알고리즘이 있습니다. 이러한 모든 알고리즘은 시간 및 공간 복잡성이 다르지만 일반적으로 병합 및 빠른 정렬이 가장 좋은 것으로 간주됩니다. 정렬은 매우 일반적인 작업이므로 프로그래밍 언어에는 데이터를 정렬하는 내장 함수가 포함되어 있습니다. 그리고 파이썬도 그 중 하나입니다.
그러나 Python에는 sort
와 sorted
라는 두 가지 정렬 기능이 있습니다. 이 기사에서는 이 두 가지 정렬 기능의 차이점에 대해 알아볼 것입니다.
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
변수 안에 저장된 새 목록이 반환되었습니다. 두 매개변수, 즉 reverse
및 key
도 이 기능에서 사용할 수 있습니다. 두 가지를 사용하여 역순으로 정렬된 목록을 얻고 사용자 지정 키를 기반으로 목록을 정렬할 수 있습니다. 다음 예제에서는 동일한 내용을 보여 줍니다.
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}]