zip() 함수는 iterable(이터러블 : 반복 가능한 것들)을 여러개 받고, 원소 1개씩을 뽑아 tuple(튜플)로 합친다.
> 주로 여러 개의 리스트를 동시에 for 문에 넣어 새로운 리스트를 만들고 싶을 때 사용한다.
syntax(문법)
zip(*iterables)
* : 여러개의 인수(argument)를 받을 때 앞에 붙임, asterisk(애스터리스크)라고 부름
예제 1
두 개 리스트 이름(last_name)과 성(first_name)을 합치고 출력해 본다
last_names = ["Jack","Matt","Obama"]
first_names = ["Cock", "Bal", "Care"]
result = zip(last_names,first_names)
print (result)
zip 오브젝트라고 나온다
<zip object at 0x7facb7320800>
> zip() 함수는 <zip 오브젝트(객체 : 덩어리)>를 만들어 낸다. 이것도 당연히 iterable 이다. 따라서 반복문에 그냥 넣을 수 있다.
예제 2
zip() 오브젝트를 출력하여 값을 보고 싶을 때는 list나 dictionary로 변환해야 한다.
last_names = ["Jack","Matt","Obama"]
middle_names = ["D","S","O"]
first_names = ["Cock", "Bal", "Care"]
result_list = list(zip(last_names,middle_names,first_names))
result_dict = dict(zip(last_names,first_names))
print (result_list)
print (result_dict)
- list로 바꾸면 각 원소가 tuple로 나온다. 여러 개를 합친 zip 오브젝트를 바꿀 수 있다.
- dictionary를 만드는 건 2개를 합친 zip 오브젝트만 가능하다.
[('Jack', 'D', 'Cock'), ('Matt', 'S', 'Bal'), ('Obama', 'O', 'Care')]
{'Jack': 'Cock', 'Matt': 'Bal', 'Obama': 'Care'}
예제 3
이름, 성, 중간 이름의 세 개 list를 각각 합쳐서 한 개(full_name)으로 만들기
zip() 오브젝트를 list comprehesion으로 for 문을 돌려 string(문자열)을 만든다.
*list comprehension : 리스트를 만들기 위해 한 줄로 for 문을 돌릴 수 있게 하는 문법 => [ <code> for i in iterable ]
full_names = [ ' '.join(i) for i in zip(last_names,middle_names,first_names)]
print (full_names)
출력
['Jack D Cock', 'Matt S Bal', 'Obama O Care']
예제 4
각각의 이름 마다 index 값을 넣어 [index , fullname]으로 된 새로운 list 만들기
*enumerate : iterable의 index를 사용할 수 있게 해줌
[ [i,' '.join(j)] for i,j in enumerate(zip(last_names,middle_names,first_names))]
출력
[[0, 'Jack D Cock'], [1, 'Matt S Bal'], [2, 'Obama O Care']]
예제 5
사용자 정보 리스트 만들기
1. 이름은 full name으로 만들어 주세요
2. 여러 개의 attribute(속성)가 있을 수 있습니다 : email, address, phone number 등
3. 출력은 1개의 리스트로 보여주세요
last_names = ["Jack","Matt","Obama"]
middle_names = ["D","S","O"]
first_names = ["Cock", "Bal", "Care"]
emails = ['jackcock@gmail.com','BalMatt@gmail.com','ObamaCare@gmail.com']
address = ['dongsack-dong','imnae-dong','jangsajin-dong']
## fullname으로 만드는 함수
def mk_fullname():
<code>
## user info를 정리한 함수
def user_info():
<code>
- *args(아규먼트, 다른 이름으로 해도 됨) 는 여러개를 원소의 반복으로 받음. 여러개 취급
- *args = a, b, c, d
- zip(*args) = last_names, middle_names, first_names
- 반면에 args 는 튜플. 한 개 취급
- args = (a, b, c, d)
- zip(args) = (last_names, middle_names, first_names)
만들기
def mk_fullname(*args):
full_names = [ ' '.join(name) for name in zip(*args)]
return full_names
def user_info(*args):
result = [ [idx,*datas] for idx,datas in enumerate(zip(*args))]
return result
fullnames = mk_fullname(last_names,middle_names,first_names)
user_info(fullnames,emails,address)
출력
[[0, 'Jack D Cock', 'jackcock@gmail.com', 'dongsack-dong'],
[1, 'Matt S Bal', 'BalMatt@gmail.com', 'imnae-dong'],
[2, 'Obama O Care', 'ObamaCare@gmail.com', 'jangsajin-dong']]
'데이터 분석 > python' 카테고리의 다른 글
[Python] 정규표현식 기초 (0) | 2021.01.27 |
---|---|
[python] while문 break와 continue 활용 예제 (0) | 2020.12.01 |
anaconda3 전체 경로에서 사용하기 (command not found: jupyter) (1) | 2020.11.13 |