대외활동/[부트캠프] 빅데이터 분석가 과정

[Python] 02-5. Python 기초 - 함수, lambda함수, sort와 sorted

셈뇽 2024. 4. 1. 21:03
[ASAC] 02-5. Python 기초 - 함수

 

 

 

함수

✅ 입/출력의 관계를 기능 중심으로 작성한 것 

 

1️⃣ 기본 구조

def 함수이름(입력):
	# 무엇을 할지 기술
	return 출력
# 파이썬은 기본적으로 출력을 tuple로 묶어서 내보냄

 

- 두 정수를 더하는 함수를 만들어보자.

def sum2(a, b):
  return a+b

 

2️⃣ 출력이 여러 개인 함수

- 함수는 입/출력이 여러 개일 수 있다.

def multiple2(a,b):
	return a+b, a*b, a/b
	# 출력은 튜플형태
	# 아래처럼 출력 튜플에 접근하여 사용가능
print(multiple2(10,20)[1])

 

3️⃣ 입력이 가변적인 함수

# 가변적인 함수
# -> args를 이용하여 리스트처럼 사용 가능
def sumrandom( *args):
  res=0
  for i in args:
    res+=i

  return res

x=[10,20,30,40,50]
sum_ = sumrandom(*x)
print(sum_)

## return 
# 150

 

함수는 한번 만든 후 재사용이 가능하기 때문에, 반복되는 작업이 있다면, 내가 원하는 대로 커스텀해서 코드의 효율을 높이자! 

 

lambda 함수

✅ "함수가 그렇게 많이 사용되지 않을 것 같은데...?" 할 떄 쓰는 함수

→ 코딩테스트 최종 출력 등에서 중요하게 쓰이고, 코드 재활용은 불가능한 함수이다.

 

1️⃣ 기본 구조

(lambda 입력인자들 : 무엇을 할지 기술)

 

2️⃣ 실제로 어떻게 쓰이는지 보자. 

(lambda a,b :a+b)(10,30) 

## return
# 40

 

정렬 함수 sort, sorted

✅ 파이썬은 정렬을 해 주는 함수가 존재한다

 

1️⃣ sorted() 

  reverse = False : 오름차순 정렬(default) /  True : 내림차순 정렬 

⭐ sorted() 함수는 리스트의 "원본을 유지하고, 정렬된 새로운 리스트를 반환한다"

str_list = ["좋은하루", "good morning", "굿모닝","niceday"]
str_list

sorted(str_list) # --> 기본: 값 & 오름차순
# 컴퓨터의 코드값 기준으로 영어가 앞의 숫자,,,,(ASCII코드)

## return
# ['good morning', 'niceday', '굿모닝', '좋은하루']


sorted(str_list, reverse=True) # --> 옵션 : 값&내림차순

## return
# ['좋은하루', '굿모닝', 'niceday', 'good morning']

 

2️⃣ sort() 

  reverse = False : 오름차순 정렬(default) /  True : 내림차순 정렬 

⭐ sort() 함수는 리스트의 "내용을 직접 갱신하며, 새로운 리스트를 반환하지 않아 원본 유지가 어렵다"

str_list = ["좋은하루", "good morning", "굿모닝", "niceday"]
print("원본 리스트:", str_list)

# 값과 오름차순으로 정렬
str_list.sort()
print("오름차순 정렬:", str_list)

# 내림차순으로 정렬
str_list.sort(reverse=True)
print("내림차순 정렬:", str_list)


## return
# 원본 리스트: ['좋은하루', 'good morning', '굿모닝', 'niceday']
# 오름차순 정렬: ['good morning', 'niceday', '굿모닝', '좋은하루']
# 내림차순 정렬: ['좋은하루', '굿모닝', 'niceday', 'good morning']

 

3️⃣ lambda 함수와 정렬 함수가 같이 쓰이면?

 

- 아래와 같이 간단하게 쓸 수 있다. → 코테 출력용으로 많이 사용됨

sorted(str_list, key = lambda x: len(x), reverse=True)

## return
# ['good morning', 'niceday', '좋은하루', '굿모닝']

 

- 내림차순을 다른 형태로 적용하면? → ' 마이너스 기호 '를 사용하자! 

score_list = [('a',0),('b',1),('c',5),('d',3),('e',4)]

sorted(score_list, key = lambda x:-x[1])

## return
# [('c', 5), ('e', 4), ('d', 3), ('b', 1), ('a', 0)]
# 조금 더 유사한 값들이 있는 조건 : 이름-성적
zumsu_list = [
    ("A",0), ("B",5), ("AA", 3),
    ("C",5), ("B",1), ("Z", 5),
    ("D",3), ("E",5)
]
zumsu_list

# 이름 순서대로 오름차순, 같으면 성적순
sorted(zumsu_list, key=lambda x:(x[0],-x[1]))

 ## return
# [('A', 0),
#  ('AA', 3),
#  ('B', 5),
#  ('B', 1),
#  ('C', 5),
#  ('D', 3),
#  ('E', 5),
#  ('Z', 5)]