zip( ) 함수
2개 이상의 시퀀스를 짧은 길이를 기준으로 일대일 대응하는 새로운 튜플 시퀀스를 만드는 역할
파이썬2에서는 zip( )의 결과를 리스트로 리턴하지만 파이썬3+에서는 제너레이터를 리턴함
→ 제너레이터에서 실제값을 추출하기 위해서는 list( )로 한번 더 묶어주면 됨
zip( )의 결과 자체는 리스트 시퀀스가 아닌 튜플 시퀀스를 만들기 때문에 값을 변경하는게 불가능
>>> a = [1, 2, 3, 4, 5]
>>> b = [2, 3, 4, 5]
>>> c = [3, 4, 5]
>>> 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)]
Python
복사
아스테리스크(*)
C에서 사용되는 포인터 변수와 혼동될 수 있지만 파이썬에는 포인터가 존재하지 않음
파이썬에서 *는 Unpack으로 시퀀스를 풀어헤치는 연산자를 뜻하며 주로 튜플이나 리스트를 unpacking하는 데 사용함
>>> collections.Counter(nums).most_common(k)
[(1, 3), (2, 2)]
# Unpacking 했을 때
>>> list(zip(*collections.Counter(nums).most_common(k)))
[(1, 2), (3, 2)]
# Unpacking 하지 않았을 때
>>> list(zip(collections.Counter(nums).most_common(k)))
[((1, 3),), ((2, 2),)]
Python
복사
>>> fruits = ['lemon', 'pear', 'watermelon', 'tomato']
>>> fruits
['lemon', 'pear', 'watermelon', 'tomato']
>>> print(*fruits)
lemon pear watermelon tomato
Python
복사
packing도 가능
>>> def f(*params):
... print(params)
>>> f('a', 'b', 'c')
('a', 'b', 'c')
Python
복사
일반적인 변수는 값을 하나만 취하지만 *로 처리하게 되면 나머지 모든 값을 취하게 됨
>>> a, *b = [1, 2, 3, 4]
>>> a
1
>>> b
[2, 3, 4]
>>> *a, b = [1, 2, 3, 4]
>>> a
[1, 2, 3]
>>> b
4
Python
복사
* 1개는 튜플 또는 리스트 등의 시퀀스 언패킹이고 ** 2개는 키/값 페어를 언패킹하는 데 사용됨
>>> date_info = {'year': '2020', 'month': '01', 'day': '7'}
>>> new_info = {**date_info, 'day': '14'}
>>> new_info
{'year': '2020', 'month': '01', 'day': '14'}
Python
복사