1) List comprehension
- 여러 개의 값을 돌려가면서(for) + 모은다(list)
장점: 코드가 간결해짐
단점: 너무 중첩된 경우 오히려 가독성을 떨어뜨림, for문 1~2개 정도가 적당
형식
1. 기본형: [모을 값 for in 여러개의 값]
2. 조건이 여러 가지(if ~~ else)인 경우: [모을 값1 if 조건 else 모을 값2 for i]
tip) range, items(), enumerate() 등과 함께 사용하자
a = ['a','b','c','d','f','g','c','i']
[v+'h' for i,v in enumerate(a) if i % 2 == 0]
# ['ah', 'ch', 'fh', 'ch']
[v+'e' if i % 2 == 0 else v+'o' for i,v in enumerate(a)]
# ['ae', 'bo', 'ce', 'do', 'fe', 'go', 'ce', 'io']
2) 함수
가장 기본적인 구조화 방법
- 함수 -> 클래스 -> 패키지
- 3가지 요소: 1)입력, 2)출력, 3)입출력에 대한 관계(기능)
- 기능 중심으로 작성 -> 한 번 만들거나 가지고 오면 여러번 재사용이 가능
# 함수의 기본 구조
def 함수명(입력인자): # x: 입력에 대한 세팅
무엇을 할 지에 대한 구현 # -> 입력/출력에 대한 관계/기능
return 출력 # y: 출력에 대한 세팅
def 함수명(입력1, 입력2, ...):
무엇을 할 지에 대한 구현
return 출력1, 출력2, ...
여러 개의 입력을 처리하는 경우 -> 입력인자 앞에 * 붙이기(리스트처럼 생각)
def sumrandom(*args):
temp = 0
for i in args:
temp += i
return temp
sumrandom(10,20,30,50,80)
# 190
3) lambda
def 함수보다 덜 각잡힌 기능을 표현할 때 사용, 재활용 불가
형식: (lambda a,b: 기능)(입력1, 입력2)
(lambda a,b: a+b)(10,20)
# 30
4) 정렬
4-1) list.sort() 메서드: 원본 변경
a = [15, 22, 8, 79, 10]
a.sort()
a
# [8, 10, 15, 22, 79] -> 원본 바로 변경
a.sort(reverse=True)
a
# [79, 22, 15, 10, 8] -> 오름차순: reverse = False,
# 내림차순: reverse = True
4-2) sorted() 함수: 원본 유지, 변경된 결과는 따로 할당해야 함
a = [15, 22, 8, 79, 10]
sorted(a)
# [8, 10, 15, 22, 79]
a
# [10, 79, 8, 22, 15] -> 할당 필요
b = sorted(a)
b
# [8, 10, 15, 22, 79]
sorted(a,reverse=True)
# [79, 22, 15, 10, 8]
4-3) reverse() 메서드: 단순 순서 재배치
주의할 점: 값의 크기가 아니라 단순 위치가 기준이며, 원본이 바로 변경됨
a = [15,22,8,79,10]
a.reverse()
a
# [10, 79, 8, 22, 15]
4-4) 문자열 정렬: 컴퓨터의 코드값 기준으로 영어가 한글보다 앞의 숫자로 할당
str_list = ['좋은하루','good morning','굿모닝','niceday']
sorted(str_list)
# ['good morning', 'niceday', '굿모닝', '좋은하루']
5) lambda 함수를 기준으로 정렬: 특별한 정렬 기준을 세울 때 사용
형식: sorted(list, key = lambda x(개별 원소): 정렬기준)
str_list = ['좋은하루','good morning','굿모닝','niceday']
# 앞 글자 1개만 가지고 정렬하기
sorted(str_list, key = lambda x: x[0]) # x: 개별 원소
# ['good morning', 'niceday', '굿모닝', '좋은하루']
# 두 번째 글자 1개만 가지고 정렬하기
sorted(str_list, key = lambda x: x[1])
# ['niceday', 'good morning', '굿모닝', '좋은하루']
# 글자의 길이 순서대로 정렬하기(기본값 오름차순)
sorted(str_list, key = lambda x: len(x))
# ['굿모닝', '좋은하루', 'niceday', 'good morning']
# 글자의 길이 순서대로 정렬하기(내림차순)
sorted(str_list, key = lambda x: len(x), reverse=True)
# ['good morning', 'niceday', '좋은하루', '굿모닝']
tip) 부호를 통한 오름차순(+)/내림차순(-) 핸들링
- 조건이 여러개 혹은 각각 다른 기준일 때 유용하다
str_list = ['좋은하루','good morning','굿모닝','niceday']
# 글자의 길이 순서대로 정렬하기(내림차순, +/-부호)
sorted(str_list, key = lambda x: +len(x))
# ['굿모닝', '좋은하루', 'niceday', 'good morning']
sorted(str_list, key = lambda x: -len(x))
# ['good morning', 'niceday', '좋은하루', '굿모닝']
# 이름과 성적이 있는 자료들에 대한 정리
zumsu_list = [('A',0),('B',1),('C',5),('D',3),('E',5)]
# 이름 중심으로 정렬
sorted(zumsu_list, key = lambda x: x[0])
# [('A', 0), ('B', 1), ('C', 5), ('D', 3), ('E', 5)]
# 성적순으로 정렬
sorted(zumsu_list, key = lambda x: x[1])
# ** 기준을 지정하지 않은 상황에서 동일한 조건이라면 '원본 순서 그대로 유지'
# [('A', 0), ('B', 1), ('D', 3), ('C', 5), ('E', 5)]
# 성적에 대한 내림차순
sorted(zumsu_list, key = lambda x: -x[1])
# [('C', 5), ('E', 5), ('D', 3), ('B', 1), ('A', 0)]
+ 기준이 2개인 경우
zumsu_list = [('A',0), ('B',5), ('AA',3),
('C',5), ('B',1), ('Z',5),
('D',3), ('E',5)]
# 1정렬: 이름(오름차순), 2정렬: 성적(오름차순)
# -> lambda 함수에 기준을 순서대로 작성
sorted(zumsu_list, key = lambda x: (x[0],x[1]))
# [('A', 0), ('AA', 3), ('B', 1), ('B', 5),
# ('C', 5), ('D', 3), ('E', 5), ('Z', 5)]
'ASAC 6기 > Python 기본' 카테고리의 다른 글
[Python 기본] while, stack, queue, 재귀함수 (0) | 2024.08.17 |
---|---|
[Python 기본] 정렬 알고리즘(선택정렬, 삽입정렬, 버블정렬) (0) | 2024.08.15 |
[Python 기본] 멀티 할당, set, dict, divmod, list, enumerate (0) | 2024.08.11 |