개발/Python

[파이썬] lambda, sort - 리스트 특정 조건, 다중 조건 정렬

자유로운 코끼리 2020. 9. 1. 16:33
728x90

lambda

lambda 함수는 익명 함수로

단발적으로 쓰이는 함수를 말한다.

 

이때 함수를 아주 간단하게 쓰면 lamda가 된다고 생각하면 쉽다.

다음과 같은 식을,

def add(x):
	return x+10

아래와 같이 바꾸어 줄 수 있다.

add = lambda x: x+10

if 문 등도 사용할 수 있는데,

def score(x):
    if x>=80:
        return 'pass'
    else:
        return 'f'
score= lambda x: 'pass' if x>=60 else 'f'

if문이 ture일 때를 앞부분, else 일 때를 뒤에 적어주면 된다.

 

이런 lamda는 다양하게 사용되는데,

그 중에서도 sort메소드와 함께 사용되는 경우가 많다.

 

 

sort

strings = [(2, 0), (3, 1), (1, 2)]
strings.sort() #정렬 방법 1
sort_string = sorted(strings) #정렬 방법2

#[(1, 2), (2, 0), (3, 1)]

첫번째 정렬방법은 strings 자체를 변화시키는 거고

후자는 sorted함수를 선언했기 때문에 return 값을 담을 변수가 필요합니다.

 

이때 정렬할 때 특정 조건을 줄 수 있는데,

strings = [(2, 0), (3, 1), (1, 2)]

strings.sort(key = lambda x : x[0])
string_sorted = sorted(strings, key = lambda x : x[0])

lamda함수의 key 인자를 통해 가능하다.

 

다중조건을 주고 싶을 때는 튜플 형식으로 앞에오는 것을 우선 조건으로하여 만들 수 있다.

# 아이템 첫 번째 인자를 기준으로 오름차순으로 먼저 정렬하고,
# 그리고 그 안에서 다음 두 번째 인자를 기준으로 내림차순으로 정렬한다. 
strings = [(2, 0), (3, 1), (1, 2), (1, 0)]
strings.sort(key = lambda x : (x[0],-x[1]))
string_sorted = sorted(strings, key = lambda x : (x[0],-x[1]))
#[(1, 2), (1, 0), (2, 0), (3, 1)]