티스토리 뷰

1
2
3
4
5
6
7
colors = ('BLACK''white''Red''green''blue')
 
def ignore(text):
    return text.lower()
 
temp = sorted(colors, key=ignore)
print(temp)


위 코드는 앞서 리스트에서 했던 키값을 이용하여 정렬하기를 응용한 정렬이다.

우선적으로 colors라는 변수를 살펴보면 이전에 했던 리스트와 다른점을 찾을수가 있는데 바로 괄호의 모양이다.
리스트는 대괄호를 사용하고, 튜플은 소괄호를 사용한다. 이후에 알아볼 사전(dictionary)과 set은 중괄호를 사용한다.

튜플의 가장 큰 특징이라고 한다면 값을 수정할 수 없다는 점이다.
리스트와 비슷한 역할을 하지만 값을 넣거나 삭제하고 수정할수있는 리스트와는 구분해서 사용하는것이 좋다.

코드로 다시 돌아와서 설명을 하자면 colors라는 튜플 안에 있는 변수들은 대소문자가 각각 제각각이다. 따라서 정렬을 했을때 원하는 결과가 나오지 않을 확률이 높다.

따라서 ignore라는 함수를 추가로 만들어서 입력한 텍스트를 소문자로 리턴받고, 앞서 리스트에서 했던 방식과 같이 정렬을 한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
tuples = [('kim',30), ('han',10), ('min',20), ('han',70), ('min'90)]
 
def age(t):
    return t[1]
 
def name(t):
    return t[0]
 
tuples.sort(key=age)
print(tuples)
 
tuples.sort(key=name)
print(tuples)
cs

위 코드는 튜플에 키값을 부여하여 정렬하는 방법이다.

방금 전에 알아본 예제와 방법은 같지만, 리스트 내부에 튜플을 포함하고 있고, 튜플도 리스트처럼 대괄호를 통한 참조가 가능하다는 점을 참고하면 되겠다.

1
2
3
4
from operator import itemgetter
 
tuples.sort(key=itemgetter(0))
print(tuples)
cs

operator 라는 모듈에서 itemgetter만 import 했다.

itemgetter 함수를 operator를 import해서 사용할 수도 있지만 매번 operator.itemgetter라고 호출해야 하는 점이 불편하다. 위와같이 모듈 내부에 있는 모듈을 import 하는 방법도 있으니 참고하자.

사실 방금 전에 age,name이라는 함수를 만들었지만 제공된 itemgetter 함수를 이용하면 해당 리스트(혹은 튜플, 딕셔너리 등)의 n번째 방에 있는 값을 참조할 수 있다.

1
2
tuples.sort(key=itemgetter(0,1))
print(tuples)
cs

이와같은 형식으로 2차정렬을 할 수도 있다. 만약 같은이름이 있다면 같은이름을 나이순으로 정렬한다고 해석하면 되겠다.

1
2
tuples.sort(key=lambda t: t[1])
print(tuples)
cs

다음으로 소개할 방법은 람다 함수를 이용하는 방법인데, 우선 람다 함수에 대해서 알아보자.

1
2
def hap(x, y):
    return x + y
cs

아주 초보적인 함수로서 매개변수로 전달받은 x의 값과 y의 값을 더하여 반환하는 함수이다. 이 함수를 람다 함수로 어떻게 나타낼 수 있을까

1
(lambda x,y: x + y)(10,20)
cs

이와같은 형태로 나타낼 수 있겠다.
파이썬 뿐만이 아니라 다른 언어에서도 자주 사용되는 형식이므로 숙지해 놓는것이 좋겠다. 따라서 이를 응용하면

1
2
tuples.sort(key=lambda t: t[1])
print(tuples)
cs

다음과 같은 형태로 튜플을 초기화 시켜볼 수 있겠다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함