파이썬 자료형의 정렬
1. iterable.sort()와 built-in sorted() 함수
list_a = [3,5,7,8,2,6]
print(list_a.sort()) # None : list 의 sort는 정렬기능만하고 return이 없다
print(list_a) # [2, 3, 5, 6, 7, 8] : list_a가 정렬
list_b = [3,5,7,8,2,6]
print(sorted(list_b)) # [2, 3, 5, 6, 7, 8] : sorted는 정렬된 값을 return한다
print(list_b) # [3, 5, 7, 8, 2, 6] : 원래 list_b는 변경되지 않는다.
tuple_a = (3,5,7,8,2,6)
#print(tuple_a.sort()) # Error. tuple은 imputable이므로 자체를 정렬하는 sort 기능이 없다
tuple_b = (3,5,7,8,2,6)
print(sorted(tuple_b)) # [2, 3, 5, 6, 7, 8] : list로 return 한다
print(tuple_b) # (3, 5, 7, 8, 2, 6) : sorted로 변경되지 않는다.
# List의 데이터 조작후 정렬. tuple도 동일
def ignore_case(input):
return input.lower()
name = ['Lee', 'jin', 'Kim', 'park' ]
print(sorted(name, key=ignore_case)) # ['jin', 'Kim', 'Lee', 'park']
print(sorted(name, key=ignore_case, reverse=True)) # ['park', 'Lee', 'Kim', 'jin']
2. 특정키 기준으로 정렬
1) itemgetter 사용
from operator import itemgetter
score = [('Min',100), ('Kim',90), ('Lee',80), ('Park',85),('Song',85)]
score.sort(key=itemgetter(0)) # [('Kim', 90), ('Lee', 80), ('Min', 100), ('Park', 85), ('Song', 85)] - 이름으로 정렬
print(score)
score.sort(key=itemgetter(1), reverse=True) # [('Min', 100), ('Kim', 90), ('Park', 85), ('Song', 85), ('Lee', 80)] - 성적으로 정렬
print(score)
score.sort(key=itemgetter(1,0), reverse=True) # [('Min', 100), ('Kim', 90), ('Song', 85), ('Park', 85), ('Lee', 80)] - 성적,이름으로 정렬
print(score)
2) Lamda 식 사용
score2 = [('Min',100), ('Kim',90), ('Lee',80), ('Park',85),('Song',85)]
score2.sort(key=lambda t:t[0]) # [('Kim', 90), ('Lee', 80), ('Min', 100), ('Park', 85), ('Song', 85)] - 이름으로 정렬
print(score2)
score2.sort(key=lambda t:t[1], reverse=True) # [('Min', 100), ('Kim', 90), ('Park', 85), ('Song', 85), ('Lee', 80)] - 성적으로 정렬
print(score2)
score2.sort(key=lambda t:(t[1],t[0]), reverse=True) # [('Min', 100), ('Kim', 90), ('Song', 85), ('Park', 85), ('Lee', 80)] - 성적,이름으로 정렬
print(score2)
score2.sort(key=lambda t:(-t[1],t[0]), reverse=True) # [('Lee', 80), ('Song', 85), ('Park', 85), ('Kim', 90), ('Min', 100)]- 성적은 오름차순,이름은 내림차순으로 정렬
print(score2)
# dictionary 정렬 . dictionary도 key는 immutable이므로 key sort 함수는 제공하지 않는다
score_dict = {'Min':100 , 'Kim':90, 'Lee':80 , 'Park':85 , 'Song':85}
temp = sorted(score_dict, key=lambda k: k[0]) # ['Kim', 'Lee', 'Min', 'Park', 'Song']
print(temp)
temp = sorted(score_dict.items(), key=lambda k: k[0],reverse=True) # [('Song', 85), ('Park', 85), ('Min', 100), ('Lee', 80), ('Kim', 90)]
print(temp)
temp = sorted(score_dict.items(), key=lambda k: k[1],reverse=True) # [('Min', 100), ('Kim', 90), ('Park', 85), ('Song', 85), ('Lee', 80)]
print(temp)
temp = sorted(score_dict.items(), key=lambda k: (k[1],k[0]),reverse=True) # [('Min', 100), ('Kim', 90), ('Song', 85), ('Park', 85), ('Lee', 80)]
print(temp)
temp = sorted(score_dict.items(), key=lambda k: (-k[1],k[0]),reverse=True) # [('Lee', 80), ('Song', 85), ('Park', 85), ('Kim', 90), ('Min', 100)]
print(temp)
'Tech-Pyhton' 카테고리의 다른 글
[Python] collections (0) | 2019.03.27 |
---|---|
[Python] 유용한 파이썬 기능 (0) | 2019.03.10 |
[Python] 문자열 함수 (0) | 2019.03.03 |
MIT OCW - Introduction to Computer Science and Programming in Python - Lecture 06 (0) | 2019.02.24 |
MIT OCW - Introduction to Computer Science and Programming in Python - Lecture 05 (0) | 2019.02.12 |
댓글