본문 바로가기

Python

[파이썬] iterable 정렬

list

기존 list를 정렬하려면 list의 매서드 sort()를 사용하고, 기존 list를 그대로 두고 정렬된 list를 만들고 싶으면 sorted() 사용한다. 

sorted()는 매개변수 reverse가 False이면 오름차순(default), True이면 내림차순으로 정렬한다. 

또한 sorted는 어떤 iterable에 대해서도 적용이 가능하다. 

list = [1, 3, 2, 4, 5, 5]
x = sorted(list) # 정렬된 함수 반환 기존 함수는 그대로, list = [1, 3, 2, 4, 5, 5]
list.sort() # list 전용 매서드 사용, list = [1, 2, 3, 4, 5, 5]
list.sort(reverse=True) # list = [5, 5, 4, 3, 2, 1]

 

dictionary

dictionary는 key와 value로 이루어져 있다 따라서 key를 기준으로 정렬할지 value를 기준으로 정렬할지에 따라 다르다. 

d = {'a': 1, 'd': 4, 'c': 3, 'e': 2}

# key를 사용하여 정렬
k = sorted(d.items())
# [('a', 1), ('c', 3), ('d', 4), ('e', 2)]

# value를 사용하여 정렬
v = sorted(d.items(), key = lambda item: item[1]) # item[1]은 value를 의미한다.
[('a', 1), ('e', 2), ('c', 3), ('d', 4)]

 

추가 리스트에서 중복요소 제거하고 정렬하기 

s = [3,1,2,2,6,4,3,5]
s = sorted(list(set(s)))
# s = [1, 2, 3, 4, 5, 6]

 

문제)

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

입출력 예:

"sun", "bed", "car"의 1번째 인덱스 값은 각각 "u", "e", "a" 입니다. 이를 기준으로 strings를 정렬하면 ["car", "bed", "sun"] 입니다.

def solution(strings, n):
    return sorted(sorted(strings), key = lambda x:x[n])

 

'Python' 카테고리의 다른 글