컬렉션 관리
컬렉션 관리 함수
enumerate
시퀀스의 인덱스와 요소를 튜플로 묶어서 순회한다.
enumerate(시퀀스 [, start])
race = ['저그', '테란', '프로토스'] print(list(enumerate(race))) ''' stdout [(0, '저그'), (1, '테란'), (2, '프로토스')] '''
시작 숫자를 정할 수 있다.
score = [88, 95, 70, 100, 99] for no, s in enumerate(score, 1): print(f"{no}번 학생의 성적 : {s}") ''' stdout 1번 학생의 성적 : 88 2번 학생의 성적 : 95 3번 학생의 성적 : 70 4번 학생의 성적 : 100 5번 학생의 성적 : 99 '''
언팩해서 쓰면 좋다.
zip
시퀀스 두 개를 순서대로 튜플로 묶어서 zip 객체로 반환한다.
- 길이가 다를 경우 짧은 길이에 맞춘다.
예시
dates = ["월", "화", "수", "목", "금", "토", "일"] food = ["갈비탕", "순대국", "칼국수", "삼겸살"] menu = zip(dates, food) for d, f in menu: print(f"{d}요일 메뉴 : {f}") ''' stdout 월요일 메뉴 : 갈비탕 화요일 메뉴 : 순대국 수요일 메뉴 : 칼국수 목요일 메뉴 : 삼겸살 '''
list(집객체)
등으로 한번 순회하고 나면 데이터가 사라진다.- zip 객체는 제너레이터 함수로 구성되어 있기 때문이다.
any, all
any(시퀀스)
- 시퀀스에 하나라도 True가 있으면 True 반환
all(시퀀스)
- 시퀀스의 모든 요소가 True이면 True 반환
예시
adult = [True, False, True, False] print(any(adult)) print(all(adult)) ''' stdout True False '''
람다 함수
filter
시퀀스의 각 요소를 판정함수에 전달하여 True를 리턴하는 요소로만 구성된 새로운 시퀀스를 리턴한다.
filter(판정함수, 시퀀스) -> 시퀀스 # "->"는 반환 자료형을 의미한다.
map
시퀀스를 변환함수에 전달하여 map 객체를 리턴한다.
map(변환함수, 시퀀스[, 시퀀스])
여러 시퀀스를 넣을 수 있다. 이 때 함수의 인수 개수와 일치해야 한다.
def add(s, b): return s + b score = [45, 89, 72, 53, 94] bonus = [2, 3, 0, 0, 5] for s in map(add, score, bonus): print(s, end = ", ") ''' stdout 47, 92, 72, 53, 99, '''
람다 함수
이름이 없는 한 줄짜리 함수이다.
lambda 인수: 식
예시
score = [ 45, 89, 72, 53, 94 ] for s in filter(lambda x: x < 60, score): print(s) ''' stdout 45 53 '''
파이썬은 들여쓰기로 줄을 구분하기 때문에, 한 줄밖에 쓰지 못한다.
컬렉션의 사본
시퀀스의 사본
원시타입이 아닌 자료형은 기본적으로 대입할 때 Call by Reference이므로 같은 객체이다.
새로운 객체를 만들려면
copy
메서드를 사용해야 한다.시퀀스.copy()
list1 = [1, 2, 3] list2 = list1.copy() # list2 = list1[:]와 동일 print(list1 == list2) list2[1] = 100 print(list1) print(list2) print(list1 == list2) ''' stdout True [1, 2, 3] [1, 100, 3] False '''
Deep Copy를 하기 위해서는
deepcopy
메서드를 사용한다.import copy list0 = ['a', 'b'] list1 = [list0, 1, 2] list2 = copy.deepcopy(list1) # 깊은 복사 list2[0][1] = 'c' print(list1) print(list2) ''' stdout [['a', 'b'], 1, 2] [['a', 'c'], 1, 2] '''
is 연산자
두 변수가 같은 객체를 가리키는지 조사할 수 있다.
list1 = ['a', 'b'] list2 = list1 list3 = list1.copy() # 얕은 복사 print("list1 is list2 :", list1 is list2) print("list1 is list3 :", list1 is list3) print("list2 is list3 :", list2 is list3) ''' stdout list1 is list2 : True list1 is list3 : False list2 is list3 : False '''
'Python > Syntax' 카테고리의 다른 글
파이썬 예외 처리 (0) | 2021.08.24 |
---|---|
파이썬 표준 모듈 (0) | 2021.08.24 |
파이썬 집합(Set) (0) | 2021.08.22 |
파이썬 사전(Dictionary) (0) | 2021.08.22 |
파이썬 튜플(Tuple) (0) | 2021.08.22 |