sort() sorted()

Published by onesixx on

https://this-programmer.tistory.com/395

sort() 메소드 : 리스트만을 위한

  • 리스트를 정렬된 상태로 변경
  • 기존리스트 없어짐
myList = [3, 1, 4, 5, 2]

myList.sort()  # None

myList         # [1, 2, 3, 4, 5]

sorted() 내장함수 : iterable객체

  • Iterable객체로부터 정렬된 리스트를 생성
  • (기존의 리스트 변경없이) 정렬된 새로운 리스트를 반환
myList = [3, 1, 4, 5, 2]

sorted(myList) # [1, 2, 3, 4, 5]

myList         # [3, 1, 4, 5, 2]
sorted(정렬할 데이터)
sorted(정렬할 데이터,             reverse 파라미터=True/False)
sorted(정렬할 데이터, key 파라미터)
sorted(정렬할 데이터, key 파라미터, reverse 파라미터)

key 매개변수

myDict = {3:'D', 2:'B', 5:'B', 4:'E', 1:'A'}

sorted(myDict)
sorted(myDict.keys())
# [1, 2, 3, 4, 5]
myDict = {3:'D', 2:'B', 5:'B', 4:'E', 1:'A'}

resultItems = sorted(myDict.items())

#resultItems = sorted(myDict.items(), key=lambda item: item[0])

import operator
#resultItems = sorted(myDict.items(), key=operator.itemgetter(0))


dict(resultItems)
dict(sorted(myDict.items()))
# {1: 'A', 2: 'B', 3: 'D', 4: 'E', 5: 'B'}


def sort_key(k_v):
    return k_v[1]
dict(
    sorted(myDict.items(), key=sort_key)
)
# {1: 'A', 2: 'B', 5: 'B', 3: 'D', 4: 'E'}


from collections import defaultdict
res = defaultdict(list)
for (k,v) in resultItems:
    res[k].append(v)
dict(res)

# {1: ['A'], 2: ['B'], 3: ['D'], 4: ['E'], 5: ['B']}

오름차순 정렬과 내림차순 정렬

list.sort()와 내장함수 sorted()는 모두 reverse 매개변수를 받는다. reverse 변수는 부울형으로 True 이면 내림차순이 된다. 위의 예제에서 내림차순으로 정렬하려면 다음과 같이 한다.

>>> sorted(students, key=lambda student: student[2], reverse=True)
[('홍길동', 3.9, 2016303), ('김철수', 3.0, 2016302), ('최자영', 4.3, 2016301)]

리스트를 정렬할 때 사용하는 sorted() 함수입니다.

sorted() 함수는 리스트를 정렬하여 새로운 리스트로 만드는 내장 함수입니다. sorted() 함수는 매개변수로 key 함수를 사용할 수 있는데, key 매개 변수의 값은 단일 인자를 취하고 정렬 목적으로 사용할 키를 반환하여야 합니다.

정렬의 기준이 되는 key에 람다 표현식을 이용할 수가 있습니다.

예를 들어, [과일 이름, 개수]를 요소로 가지고 있는 이차원 리스트를 과일 이름으로 정렬하여 봅시다.

만약 람다 표현식이 없다면 어떻게 구현할 수 있을까요?

2차원 리스트

이럴 경우 간편하게 사용할 수 있는 것이 바로 람다입니다.

아래 예제에서 x[0]은 과일 이름을 기준으로 정렬하기 위한 것이고, x[1]로 설정을 변경하면 과일 이름 대신 리스트의 두 번째 요소인 개수로 정렬됩니다.

2차원 리스트 람다로 정렬하기

지금까지 알고 있으면 쉽고 간단한 파이썬의 람다의 개념에 대해서 알아보았습니다.

Categories: Python Basic

onesixx

Blog Owner

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x