728x90
반응형
zip() 함수
- zip() 함수는 2개 이상의 시퀀스(리스트, 튜플 등)를 짧은 길이를 기준으로 일대일 대응하는 새로운 튜플 시퀀스를 만든다.
a = [1,2,3,4,5]
b = [2,3,4,5]
c = [3,4,5]
zip(a,b)
# 결과: <zip at 0x1115a7b00>
list(zip(a,b))
# 결과: [(1, 2), (2, 3), (3, 4), (4, 5)]
list(zip(a,b,c))
# 결과: [(1, 2, 3), (2, 3, 4), (3, 4, 5)]
- 파이썬 3+에서는 zip() 함수가 제너레이터를 반환하므로, 결과를 바로 보려면 list()로 묶어야 한다.
- zip() 함수는 리스트가 아닌 튜플로 시퀀스를 생성하므로, 값을 변경할 수 없는 불변 객체이다.
d = list(zip(a,b,c))
d[0] # (1,2,3)
d[0][0] # 1
d[0][0] = 0
# TypeError: 'tuple' object does not support item assignment
아스테리스크 (*)
- *는 파이썬에서 언패킹 연산자로, 시퀀스를 풀어헤치는 역할을 한다.
from collections import Counter
num = [1,1,1,2,2,3]
k=2
counts = collections.Counter(num).most_common(k)
# 결과: [(1, 3), (2, 2)]
#언패킹했을 때
list(zip(*counts))
# 결과: [(1, 2), (3, 2)]
# 언패킹하지 않았을 때
list(zip(counts))
# 결과: [((1, 3),), ((2, 2),)]
- *counts는 [(1, 3), (2, 2)] 리스트 안의 각 튜플을 풀어 zip() 함수에 전달하여 (1, 2)와 (3, 2)가 만들어지게 한다.
예제. *를 활용한 리스트 요소 출력
fruits = ['lemon', 'pear', 'waterlemon', 'tomato']
# 방법1
print(fruits[0], fruits[1], fruits[2], fruits[3])
# 방법2
for f in fruits:
print(f, end=' ')
# 결과: lemon pear waterlemon tomato
# 방법3: 언패킹 활용
print(*fruits)
# 결과: lemon pear watermelon tomato
- 리스트를 직접 하나하나 호출하지 않고, *로 언패킹하여 모든 요소를 출력할 수 있다.
*를 사용한 함수 파라미터 패킹
- *는 함수의 파라미터에서 여러 개의 인수를 하나의 튜플로 묶어준다.
- 즉, 여러 값을 패킹하여 하나의 변수로 관리할 수 있게 한다.
def f(*params):
print(params)
f('a','b','c')
# 결과: ('a', 'b', 'c')
- 위 코드에서 f 함수는 *params라는 단일 변수로 여러 인수를 받는다.
- 이 경우, params는 튜플로 패킹되어 ('a', 'b', 'c') 형태로 출력된다.
*를 활용한 리스트 언패킹
a, *b = [1,2,3,4]
a # 1
b # [2,3,4]
- 여기서 a는 첫 번째 값 1을 받고, b는 나머지 [2, 3, 4]를 받게 된다. 이 방식은 리스트나 튜플의 첫 번째 값과 나머지 값을 나눌 때 유용하게 사용된다.
- *를 사용하여 나머지 값들을 한 변수에 담을 수 있으므로, 파라미터를 효율적으로 다루거나 여러 변수로 값을 나누는 데에 아주 유용하다.
추가로 알아두면 좋은 *와 ** 활용
- *는 리스트나 튜플을 언패킹
- **는 딕셔너리의 키-값 쌍을 언패킹
date_info = {'year': '2020', 'month': '01', 'day': '7'}
new_info = {**date_info, 'day': "14"}
new_info
# 결과: {'year': '2020', 'month': '01', 'day': '14'}
- 이처럼 **date_info는 기존 딕셔너리의 값을 언패킹하여 새로운 딕셔너리로 확장할 수 있다.
728x90
반응형
'책 리뷰 > 파이썬 알고리즘 인터뷰' 카테고리의 다른 글
[프로그래머스-해시] 베스트앨범 (1) | 2024.11.13 |
---|---|
[프로그래머스-해시] 폰켓몬 문제 풀이 (4) | 2024.11.12 |
11장. 해시 테이블(6) - 예제(상위 K빈도 요소) (1) | 2024.11.10 |
11장. 해시 테이블(5) - 예제(중복 문자 없는 가장 긴 부분 문자열) (0) | 2024.11.09 |
11장. 해시 테이블(4) - 예제(보석과 돌) (1) | 2024.11.08 |
댓글