본문 바로가기
개발/Python

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

by 자유로운 코끼리 2020. 9. 1.
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)]

댓글