📕

zip()

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
복사