1. lambda (람다)
- 이름이 없는 함수. 일회용 함수
2. filter(함수, iterable 객체)
- filter(함수, iterable객체)
- 함수, 반환값이 True or False
- 함수의 실행 결과가 True면 그 데이터만 보내고, False면 데이터를 보내지 않음
- 특정 조건에 맞는 데이터를 추출하고자 할 때
예제 1) 함수를 lambda와 filter를 사용하여 짧은 코드 만들기
nums = [1, 2, 3, 33, 4, 6, 23, 26, 17, 19, 21, 8, 19, 27]
# 짝수만 필터링
evenList = [] # 리스트 타입 객체를 만듦
for n in nums:
if n%2==0:
evenList.append(n)
print(evenList)
############################# 위의 코드를 함수로 만듦
## 조건식만 바꾸면 됨
# 함수를 함수의 매개변수로 전달 (compare)
# 함수도 주소 -> 변수에 함수를 저장할 수 있음
# 함수에 매개변수로 전달되는 함수는 콜백함수라고 부름
### 호출자가 직접하는게 아니고 다른 함수
### 함수의 매개변수나 반환값의 결정자는 본인이 아니며 약속된 형태만 보내야 함
def myfilter(compare, nums):
evenList = []
for n in nums:
if compare(n):
evenList.append(n)
return evenList
def myCompare(x):
return x%2==0 # 짝수인가?
print(myfilter(myCompare, nums))
# def add(x, y):
# return x+y
# calc = add # 함수의 주소를 변수에 저장 가능
# print(calc(4, 5))
############################# 위의 함수를 filter, lambda로 변환
# 프로그램 중에 일부만 살짝 고칠 수 있다면 함수를 미리 만들고 나머지는 사용자가 완성하도록
print(list(filter(myCompare, nums)))
# myCompare 함수를 lambda로 변환하기
## lambda x : x%2==0 => return 사용 X, 한 줄
print(list(filter(lambda x: x%2==0, nums)))

예제 2) 문자 찾기
wordList = ["school", "book", "bookstore", "desk", "hospital", "survey",
"assembly", "president", "python", "flower", "sky", "cloud",
"language", "phone", "house"]
# 단어 길이가 5개 이상인 단어 추출
print(len("school")>=5)
## lambda와 filter 사용
for item in filter(lambda x: len(x)>=5, wordList):
print(item)
# 단어가 b로 시작하는 것만 추출
print(list(filter(lambda u: u[0]=="b", wordList)))
# b를 포함하고 있는
print(list(filter(lambda w: "b" in w, wordList)))
3. map
- 연산을 수행해서 값을 변형해서 반환
- x => x' (연산이 가해진 변경된 x)
wordList = ["school", "book", "bookstore", "desk", "hospital", "survey",
"assembly", "president", "python", "flower", "sky", "cloud",
"language", "phone", "house"]
nums = [1,2,33,4,6,23,26,17,19,8,19,27]
# nums에 값을 10씩 더하기
print(list(map(lambda x: x+10, nums)))
# wordList 의 문자들을 대문자로 변환
print(list(map(lambda x: x.upper(), wordList)))
4. zip
- zip(list1, list2, list3) => 각 원소들끼리 결합해서 새롱룬 튜플로 만들어서 반환
nameList = ["홍길동", "임꺽정", "장길산"]
phoneList = ["010-0000-0001", "010-0000-0002", "010-0000-0003"]
emailList = ["1", "2", "3"]
for data in zip(nameList, phoneList, emailList):
print(data, type(data))
5. 정렬 (sort, reverse)
- 두 가지 종류
1) 자기 자신의 순서는 그대로, 바뀐 순서만 반환
2) 자기 자신의 순서를 바꿈
# list 타입에 존재하는 함수가 sort - 자기 자신의 순서 바꿈
# default: 오름차순 정렬
# 내림차순: reverse()
nums = [1,2,33,4,6,23,26,17,19,8,19,27]
nums.sort()
print(nums)
nums.reverse()
print(nums)
# sorted(): 사용자 데이터 타입 (ex. list(dict()) 등)
dataList = [
{"name": "강감찬", "age": 23},
{"name": "감강찬", "age": 20},
{"name": "김연경", "age": 33},
{"name": "조승연", "age": 28},
{"name": "김연아", "age": 30},
{"name": "이순신", "age": 43},
{"name": "서희", "age": 35},
{"name": "윤관", "age": 27},
{"name": "박세리", "age": 43},
]
# dataList -> 각 요소가 dict type
dataList.sort(key=lambda x: x["name"])
print(dataList)
# 역순 정렬
sortedDataList = sorted(dataList, key=lambda x: x["name"], reverse=True)
print(sortedDataList)
# 나이순으로 정렬
print(sorted(dataList, key=lambda x: x["age"]))
# 나이순으로 역정렬
print(sorted(dataList, key=lambda x: x["age"], reverse = True))

반응형
'데이터분석' 카테고리의 다른 글
[23.06.09] Python 객체 지향, 모듈 - 06(1) (2) | 2023.06.09 |
---|---|
[23.06.08] Python comprehension, random - 05(2) (0) | 2023.06.08 |
[23.06.07] Python 함수 - 04(3) (2) | 2023.06.07 |
[23.06.07] Python 제어문, 2차원 배열- 04(2) (0) | 2023.06.07 |
[23.06.07] Python 데이터 타입, 인덱싱, 슬라이싱 (복습) - 04(1) (0) | 2023.06.07 |