[python] sort(), sorted()에 정렬 기준을 추가하기

코딩하는계란·2021년 1월 1일
0

python

목록 보기
1/3
post-thumbnail

📌 sort()와 sorted()

👉 sort()

  • 리스트의 원본을 직접 수정 정렬

👉 sorted()

  • 정렬된 새로운 리스트 반환 (원본 리스트는 그대로)

words1 = ["ad", "ac", "a", "aaa", "g", "f", "d", "aa"]
words2 = ["ad", "ac", "a", "aaa", "g", "f", "d", "aa"]


def temp_function(a):
    return len(a), a


# 아래의 두 결과는 같다
words1.sort(key=temp_function)

words2.sort(key=lambda x: (len(x), x))

# words1 결과
# ['a', 'd', 'f', 'g', 'aa', 'ac', 'ad', 'aaa']

# words2 결과
# ['a', 'd', 'f', 'g', 'aa', 'ac', 'ad', 'aaa']

# sorted 에 key 사용법
# sort_word = sorted(word, key=lambda x: (len(x), x))

위의 코드에서 보다시피 함수를 추가해서 길이를 비교 후 같은 길이에서는 알파벳 순으로 정렬한 것이다.


def temp_function(a):
    return -len(a), a


# 아래의 두 결과는 같다
words1.sort(key=temp_function)

words2.sort(key=lambda x: (-len(x), x))

print(words1)
# words1 결과
# ['aaa', 'aa', 'ac', 'ad', 'a', 'd', 'f', 'g']

# words2 결과
# ['aaa', 'aa', 'ac', 'ad', 'a', 'd', 'f', 'g']

위의 코드 처럼 함수의 리턴값에 -를 붙여주면 역순이된다.
words2.sort(key=lambda x: (-len(x), x), reverse=True) 처럼 reverse=True 를 추가하여 역순으로 만들 수 있다. 하지만 전체 결과 값이 역순이되므로 기준을 여러개를 이용할때는 주의해야한다.


profile
코딩💻 고양이😺

0개의 댓글