Stay Hungry Stay Foolish

알고리즘

[자료구조] sort, sorted, 정렬, 이중 리스트 정렬 (Python)

dev스카이 2023. 10. 31. 00:18

정렬 

✔ list.sort() - 오름차순으로 정렬

list = [3, 4, 2, 1, 5]
list.sort()
print(list)

출력 결과
[1, 2, 3, 4, 5]

 

✔ list.sort(reverse = True) - 내림차순으로 정렬

list = [3, 4, 2, 1, 5]
list.sort(reverse=True)
print(list)

출력 결과
[5, 4, 3, 2, 1]

 

✔ sorted(list) - 오름차순으로 정렬

list = [3, 4, 2, 1, 5]
print(sorted(list))

출력 결과
[1, 2, 3, 4, 5]

 

✔ sorted(list, reverse = True) - 내림차순으로 정렬

list = ['A', 'B', 'C', 'D', 'E']
print(sorted(list, reverse=True))

출력 결과
['E', 'D', 'C', 'B', 'A']

 

 

📌 sort와 sorted의 차이점

  • sort는 리스트 자료형의 메소드로 원본값을 직접 수정
  • sorted는 파이썬의 내장 함수로 정렬한 복사본 반환
list = [3, 1, 5, 2, 4]
print(list.sort())
print(sorted(list))

출력결과
None #list.sort() 결과
[1, 2, 3, 4, 5] #sorted(list) 결과
  • 위 결과를 보면 sort는 정렬한 결과값을 반환하지 않지만, sorted는 정렬한 결과값을 반환해준다. 

 

다중 정렬

✔ list.sort(key = lambda x:x[index]) / sorted(list, ley = lambda x:x[index])

  • 이중 리스트에서 index를 기준으로 오름차순 정렬
list = [('B',3),('A', 1), ('C', 5), ('E', 2), ('D', 4)]
list.sort(key=lambda x:x[0])
print(list)

출력 결과
[('A', 1), ('B', 3), ('C', 5), ('D', 4), ('E', 2)]
  • 첫 번째 index인 문자를 기준으로만 정렬된 것을 볼 수 있다.

 

✔ list.sort(key = lambda x:-x[index]) / sorted(list, ley = lambda x:-x[index])

  • 이중 리스트에서 index를 기준으로 내림차순 정렬
list = [('B',3),('A', 1), ('C', 5), ('E', 2), ('D', 4)]
print(sorted(list, key=lambda x:-x[1]))

[('C', 5), ('D', 4), ('B', 3), ('E', 2), ('A', 1)]
  • 두 번째 인덱스인 숫자를 기준으로 내림차순 정렬된 것을 볼 수 있다.
  • 주의할 것은 내림차순 정렬 시 str 타입인 것은 안 되고 숫자인 것만 된다.
  • 아래는 오류 예시이다.

오류 예시

list = [('B',3),('A', 1), ('C', 5), ('E', 2), ('D', 4)]
print(sorted(list, key=lambda x:-x[0]))

오류
TypeError: bad operand type for unary -: 'str'

 

 

list.sort(key = lambda x:(x[index1, x[index2])) / sorted(list, key = lambda x:(x[index1], x[index2]))

  • 첫 번째 인자를 기준으로 먼저 오름차순 정렬, 두 번째 인자를 기준으로 오름차순 정렬
list = [('B',3),('A', 1), ('C', 5), ('E', 2), ('D', 4)]
print(sorted(list, key=lambda x:(x[1], x[0])))

출력 결과
[('A', 1), ('E', 2), ('B', 3), ('D', 4), ('C', 5)]
  • 첫 번째는 오름차순, 두 번째는 내림차순으로 정렬하고 싶다면 '-x[0]'라고 하면 된다.

 

✔ sort/sorted(list, key = lambda x:x[index1], reverse = True))

  • 인덱스를 기준으로 오름차순 정렬 후, 그 리스트를 내림차순으로 정렬 
list = [('B',3),('A', 1), ('C', 5), ('E', 2), ('D', 4)]
print(sorted(list, key=lambda x:x[0]))
print(sorted(list, key=lambda x:x[0], reverse=True))

출력 결과
[('A', 1), ('B', 3), ('C', 5), ('D', 4), ('E', 2)] #reverse 안 했을 때
[('E', 2), ('D', 4), ('C', 5), ('B', 3), ('A', 1)] #reverse 했을 때