enumerate
- 반복 가능한 객체의 인덱스와 원소에 함께 접근할 수 있는 함수.
- tuple(인덱스, 원소)의 형태로 객체 반환.
- 보통 list와 함께 쓰임(tuple도 가능).
people = ['펭수', '뽀로로', '뚝딱이', '텔레토비']
def func1(people):
for i, j in enumerate(people):
print(f"대기번호 {i+1}번 : {j}")
대기번호 1번 : 펭수
대기번호 2번 : 뽀로로
대기번호 3번 : 뚝딱이
대기번호 4번 : 텔레토비
zip
- 반복가능한 객체들을 (2개 이상) 병렬적으로 묶어 주는 함수.
- 각 원소들을 튜플의 형식으로 묶어줌.
list_3 = ['a', 'b', 'c']
list_4 = ['가', '나', '다']
for i in zip(list_3, list_4):
print(i)
('a', '가')
('b', '나')
('c', '다')
lambda
- 람다 식 형태로 되어 있어서 lambda expression(람다 표현식)이라고 함.
- 람다는 익명의 함수로서 간편하게 작성할 수 있게 해줌.
- python3에서는 사용이 권장 되지는 않지만 머신러닝, 데이터 분석 시에 굉장히 많이 사용됨.
lambda x: x + 2
map
- 리스트, 튜플, 스트링 등 자료형 각각의 원소에 동일한 함수를 적용
- 리스트로 묶어야 값이 보인다.
- 첫 번째 인자로 값을 return하는 함수를 요구 -> 리스트의 각 값을 바꿔주려고
- 사용자가 만들어진 map에서 원소를 찾을 때 함수를 적용해서 원소를 만들어준다.
- map()의 경우 데이터를 map이라는 클래스로 저장하고, 데이터가 필요해질 때 주어진 연산을 수행한다.
items = [1, 2, 3, 4, 5]
squared_map = list(map(lambda x: x**2, items))
print(squared_map)
[1, 4, 9, 16, 25]
Quiz) 다이아몬드들의 가격을 10배로 인상하시오.
from itertools import repeat
def increase(d,n):
d['price'] *= n
return d
diamonds_10_times = list(map(increase_price, diamonds, repeat(10)))
- diamonds는 increase_price의 첫 번째 인자, repeat(10)는 두 번째 인자.
- repeat 함수는 diamonds의 길이만큼 자동으로 10 생성해준다.
- repeat(10) = [10] * len(high_quality_diamonds)
Quiz) lambda와 map을 이용하여 items의 요소들을 string(문자)로 바꾸는 코드를 작성하시오.
items = [1, 24, 3, 6, 7]
str_items = list(map(lambda x: str(x), items))
print(str_items)
['1', '24', '3', '6', '7']
Quiz) 1~10까지의 정수를 항목으로 갖는 리스트 객체에서 map 함수와 람다식을 이용해 항목의 제곱값을 갖는 리스트를 반환하는 프로그램을 작성하시오.
nums = []
for i in range(1,11):
nums.append(i)
li = list(map(lambda x: x**2, nums))
print(li)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
filter
- 여러 개의 데이터로부터 일부의 데이터만 추려낼 때 사용하는 함수.
- 여러 개의 데이터를 담고 있는 list나 tuple을 대상으로 주로 사용하는 함수.
- True/False를 return하는 함수를 요구 -> 조건이 True인 원소들만 거르려고
- filter도 map처럼 사용자가 요구할 때 함수를 적용한다.
- list()로 묶어주지 않으면 filter object로 나오기 때문에 함수가 적용된 원소를 보기 위해선 list()로 묶어줘야 한다.
비트 연산자(&, |)
2 and 6
2 & 6
2 or 6
2 | 6
list Comprehension
- 파이썬 독특한 문법. 간결한 코딩을 할 수 있음.
- [저장할 값 for 원소 in 반복가능한 객체 if 조건]
lc_1 = [x for x in range(1, 11)]
Quiz) 구구단 2단을 list comprehension을 이용하여 구현하고 리스트를 출력해보자.
mul_2 = [x*2 for x in range(1, 10)]
Quiz) 다음의 문장을 분석해보자.
'코로나 바이러스를 예방하기 위해 사회적 거리두기를 실천합시다. 마스크를 끼고 손씻기를 생활화합시다.'라는 문장을 띄어쓰기 별로 분석하려고 한다. 띄어쓰기 별로 문장을 나눈 후 각 요소의 길이를 리스트로 저장하시오.
sentence = '코로나 바이러스를 예방하기 위해 사회적 거리두기를 실천합시다. 마스크를 끼고 손씻기를 생활화 합시다.'
lens = [len(x) for x in sentence.split()]
strip, split
- strip() : 선행과 후행 문자가 제거된 문자열의 복사본을 돌려준다. 생략되거나 None이라면, 기본값인 공백을 제거하도록 한다.
- split() : 문자를 주면 잘라서 리스트로 반환한다. 기본값은 공백.
- enter -> \n, space 4칸 이상 or tab -> \t
삼항 연산자
- condition이 참이면 True_value 값을 취하고, 거짓이면 False_value 값을 취한다.
- [True] if [Condition] else [False]
- if만 있으면 for문 뒤에 쓰면 된다.
- [True] for ~ if ~
- else를 쓰면 fot문 앞에 와야 한다.
- [True] if ~ else [False] for ~
Quiz) 10부터 20 사이의 숫자들 중에서 짝수만을 담은 리스트를 만들어보시오.
lc_2 = [x for x in range(10, 21) if x % 2 == 0]
Quiz) 40이하의 숫자는 5를 더하고 40 초과의 숫자는 41로 바꾸어 리스트로 저장하고, 리스트를 출력하라.
list_5 = [12, 67, 32, 48, 19, 57, 29, 49]
lc_6 = [x+5 if x <= 40 else 41 for x in list_5]
함수에서 매개변수가 몇 개인지 모를 때 처리 방법
- 패킹 : 한 변수에 여러 개의 데이터를 넣는 것 ex) e = [1, 2, 3]
- 언패킹 : 하나의 데이터를 각각의 변수로 반환 ex) f,g,h = e
- *args : 여러 개의 매개변수를 함수로 받고 싶을 때, 다른 변수와 함께 매개변수로 사용될 때는 맨 뒤에 위치해야 한다.
- **kwargs : 키워드 = 특정 값의 형태로 함수를 호출 할 수 있다.
- *변수를 ** 변수보다 앞에 두어야 한다.
출처