파이썬 데이터 정렬

파이썬 데이터 정렬

Python
파이썬 데이터 정렬
Author

gabriel yang

Published

October 2, 2024


파이썬에서 데이터를 정렬하는 방법은 매우 직관적이며, 다양한 자료형을 손쉽게 정렬할 수 있는 기능을 제공합니다. 이번 글에서는 파이썬에서 데이터를 정렬하는 방법을 다양한 예시와 함께 설명하겠습니다. 파이썬의 sort()sorted() 함수는 기본적인 정렬 기능을 제공하며, 이 두 함수의 차이점과 다양한 활용법을 알아보겠습니다.

1. sort()sorted()의 차이점

파이썬에서 데이터를 정렬할 때, 주로 두 가지 방법을 사용합니다.

  1. sort(): 리스트 객체의 메서드로, 리스트 자체를 직접 수정하여 정렬합니다(제자리 정렬).
  2. sorted(): 모든 시퀀스(리스트, 튜플 등)에 사용할 수 있으며, 원본 데이터는 변경하지 않고 정렬된 새로운 리스트를 반환합니다.

예시

# 리스트의 sort() 메서드
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers)  # 출력: [1, 2, 5, 5, 6, 9]

# sorted() 함수
numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 출력: [1, 2, 5, 5, 6, 9]
print(numbers)  # 원본 리스트는 그대로: [5, 2, 9, 1, 5, 6]
[1, 2, 5, 5, 6, 9]
[1, 2, 5, 5, 6, 9]
[5, 2, 9, 1, 5, 6]

sort()는 리스트 자체를 수정하지만, sorted()는 원본 데이터를 그대로 유지하면서 정렬된 새로운 리스트를 반환합니다.

2. 기본 정렬: 오름차순

파이썬의 기본 정렬 방식은 오름차순입니다. 리스트나 다른 시퀀스 자료형을 sort()sorted()를 사용하면 기본적으로 작은 값에서 큰 값으로 정렬됩니다.

numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# sort()를 이용한 오름차순 정렬
numbers.sort()
print(numbers)  # 출력: [1, 1, 2, 3, 4, 5, 6, 9]

# sorted()를 이용한 오름차순 정렬
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 출력: [1, 1, 2, 3, 4, 5, 6, 9]
[1, 1, 2, 3, 4, 5, 6, 9]
[1, 1, 2, 3, 4, 5, 6, 9]

3. 내림차순 정렬

정렬 순서를 반대로 하고 싶을 때는 reverse=True 옵션을 사용하면 됩니다.

numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# sort()로 내림차순 정렬
numbers.sort(reverse=True)
print(numbers)  # 출력: [9, 6, 5, 4, 3, 2, 1, 1]

# sorted()로 내림차순 정렬
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers)  # 출력: [9, 6, 5, 4, 3, 2, 1, 1]
[9, 6, 5, 4, 3, 2, 1, 1]
[9, 6, 5, 4, 3, 2, 1, 1]

4. 문자열 정렬

리스트에 문자열이 포함된 경우, 알파벳 순으로 정렬됩니다. 기본적으로 소문자가 대문자보다 뒤에 정렬됩니다.

words = ["banana", "apple", "cherry", "date"]

# 문자열 리스트 정렬
words.sort()
print(words)  # 출력: ['apple', 'banana', 'cherry', 'date']

# sorted()로 문자열 정렬
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words)
print(sorted_words)  # 출력: ['apple', 'banana', 'cherry', 'date']
['apple', 'banana', 'cherry', 'date']
['apple', 'banana', 'cherry', 'date']

대소문자 구분 없이 정렬하기

문자열의 대소문자를 무시하고 정렬하려면 key=str.lower 옵션을 사용합니다.

words = ["Banana", "apple", "Cherry", "date"]

# 대소문자 구분 없이 정렬
sorted_words = sorted(words, key=str.lower)
print(sorted_words)  # 출력: ['apple', 'Banana', 'Cherry', 'date']
['apple', 'Banana', 'Cherry', 'date']

5. 복잡한 데이터 구조 정렬

파이썬에서는 key 인자를 사용하여 복잡한 데이터 구조도 쉽게 정렬할 수 있습니다. 예를 들어, 딕셔너리나 튜플의 특정 요소를 기준으로 정렬할 수 있습니다.

1. 딕셔너리 리스트 정렬

딕셔너리 리스트를 정렬할 때는 key 인자를 사용하여 딕셔너리의 특정 키 값을 기준으로 정렬합니다.

students = [
    {"name": "John", "age": 20},
    {"name": "Jane", "age": 22},
    {"name": "Dave", "age": 19},
]

# age를 기준으로 정렬
students.sort(key=lambda student: student["age"])
print(students)
# 출력: [{'name': 'Dave', 'age': 19}, {'name': 'John', 'age': 20}, {'name': 'Jane', 'age': 22}]
[{'name': 'Dave', 'age': 19}, {'name': 'John', 'age': 20}, {'name': 'Jane', 'age': 22}]

lambda student: student["age"]는 파이썬의 람다 함수(익명 함수)를 사용하여 student라는 매개변수를 받아, 그 객체에서 “age”라는 키에 해당하는 값을 반환하는 함수입니다. 이를 더 자세히 설명하면 다음과 같습니다.

2. 튜플 리스트 정렬

튜플 리스트를 정렬할 때도 key 인자를 사용하여 특정 인덱스를 기준으로 정렬할 수 있습니다.

tuples = [(1, 'apple'), (3, 'banana'), (2, 'cherry')]

# 첫 번째 요소를 기준으로 정렬
tuples.sort(key=lambda x: x[0])
print(tuples)  # 출력: [(1, 'apple'), (2, 'cherry'), (3, 'banana')]

# 두 번째 요소를 기준으로 정렬
tuples.sort(key=lambda x: x[1])
print(tuples)  # 출력: [(1, 'apple'), (3, 'banana'), (2, 'cherry')]
[(1, 'apple'), (2, 'cherry'), (3, 'banana')]
[(1, 'apple'), (3, 'banana'), (2, 'cherry')]

6. 다중 기준 정렬

여러 기준을 사용해 데이터를 정렬할 수도 있습니다. 예를 들어, 학생 리스트에서 나이를 기준으로 정렬한 후, 나이가 같다면 이름을 기준으로 정렬할 수 있습니다.

students = [
    {"name": "John", "age": 22},
    {"name": "Jane", "age": 20},
    {"name": "Dave", "age": 20},
]

# 나이를 기준으로 먼저 정렬하고, 나이가 같으면 이름으로 정렬
students.sort(key=lambda student: (student["age"], student["name"]))
print(students)
# 출력: [{'name': 'Dave', 'age': 20}, {'name': 'Jane', 'age': 20}, {'name': 'John', 'age': 22}]
[{'name': 'Dave', 'age': 20}, {'name': 'Jane', 'age': 20}, {'name': 'John', 'age': 22}]

7. 튜플과 문자열의 정렬

튜플이나 문자열은 리스트와 같은 방식으로 정렬됩니다. 문자열을 문자 단위로 나누어 정렬하거나, 튜플의 각 요소를 기준으로 정렬할 수 있습니다.

# 문자열 정렬
string = "python"
sorted_string = sorted(string)
print(sorted_string)  # 출력: ['h', 'n', 'o', 'p', 't', 'y']

# 튜플 정렬
tuples = (3, 1, 2)
sorted_tuples = sorted(tuples)
print(sorted_tuples)  # 출력: [1, 2, 3]
['h', 'n', 'o', 'p', 't', 'y']
[1, 2, 3]