파이썬에서 배열을 정렬하기 위해서는 sorted()/sort()를 사용하여 내림차순,오름차순으로 정렬할 수 있습니다.
하지만 내가 원하는 특별한 기준으로 배열을 정렬하고 싶을 때는 key=lambda를 사용하면 됩니다.
1. Key가 하나일 때
ex) x를 기준으로 정렬하기 (일반 오름차순)
참고로 문자열은 다음과 같이 정렬하면 사전순으로 정렬이 된다
arr = ['abc' , 'bac' ,'bca']
sorted(arr , key = lambda x : x)
ex) arr에 속하는 각 원소들을 x라고 생각했을 때, x[0]을 기준으로 정렬하기
arr = ['abc' , 'bac' ,'bca']
sorted(arr , key = lambda x : x[0])
2. Key가 여러개 일 때
ex) x[0]을 기준으로 정렬하고 같을 경우 x[1]를 기준으로 정렬하기
arr = ['abc' , 'bac' ,'bca']
sorted(arr , key = lambda x : (x[0] , x[1]))
3. 내림차순 정렬하기
ex) x[0]은 내림차순, x[1]는 오름차순을 기준으로 정렬하기
arr = ['abc' , 'bac' ,'bca']
sorted(arr , key = lambda x : -x[0] , x[1])
관련문제
https://www.acmicpc.net/problem/10825
sol)
💡이 문제에서는 key=lambda로 표현해 정렬할 수 있지만, 내가 이 문제에서 막힌 포인트는 name과 socres는 type이 다른데 어떻게 한번에 받아오냐는 것이였다. 이 부분에 대해서는 아래 개념을 참고했다.
gift = '장난감' , '운동화', '게임기'
print(gift)
#실행결과
'장난감','운동화','게임기'
장난감과 나머지 운동화,게임기를 따로 입력받으려면 아래와 같이 두개의 입력으로 받을 경우 에러가 발생한다
toy , gift = '장난감','운동화','게임기'
따라서 gift가 튜플로 이루어져있다고 알려줘야 한다. 이때는 unpacking을 사용한다.
unpacking : packing의 반대 개념으로 여러 개의 인자가 있는 하나의 객체를 여러개로 풀어준다.
toy,*gift = '장난감','운동화','게임기'
print(toy)
pirnt(gift)
#실행결과
장난감
운동화 게임기
10825번 : 국영수 풀이
n = int(input())
arr = []
for _ in range(n) :
name,*scores = input().split()
arr.append((name, *map(int,scores)))
#문제 조건대로 정렬
arr = sorted(arr,key=lambda x : (-x[1],x[2],-x[3],x[0]))
#이름만 가져오기
for a in arr :
print(a[0])
💡매핑(mapping)이란 개념은 하나의 값을 다른 값으로 대응시키는 것을 의미. 지도를 뜻하는 map에서 나온 말이다. 지도에 표시한 정보가 현실 세계와 1:1로 대응하듯이, 매핑을 통해 하나의 값을 다른 값으로 1:1 대응 시키는 것을 의미한다.
map(function , iterable)
- function : 각 요소에 적용할 함수
- iterable : 함수에 적용할 데이터 집합
'파이썬(Python)' 카테고리의 다른 글
[python] predict vs predict_proba의 차이 (0) | 2023.12.28 |
---|---|
[python] - 일시정지(sleep) 함수 사용 (1) | 2023.11.25 |
[python] 최댓값과 최솟값의 초깃값 설정 (0) | 2023.11.14 |
[Python] BeautifulSoup으로 HTML 파싱 (0) | 2023.11.07 |
[python] 상대경로 와 glob 함수 (0) | 2023.10.06 |