[파이썬] 여러 리스트를 하나로 합쳐주는 zip 함수

2020. 2. 16. 17:31개발/파이썬

zip함수는 따로 존재하는 리스트들을 모아서 하나로 패키징 해 주는 함수입니다. 

예를 들어 아래처럼 날짜, 시가, 고가, 저가, 종가 리스트가 각각 존재할 때 이를 (날짜, 시가, 고가, 저가, 종가)의 배열로 모으는 아주 유용한 함수입니다.

date = ['2020/2/14','2020/2/13','2020/2/12','2020/2/11','2020/2/10','2020/2/7','2020/2/6','2020/2/5','2020/2/4']
open = [60900, 61200,60300,59800,59200,61100,60100,60000,57100]
high = [61900,61600,60700,60700,59800,61200,61100,60200,59000]
low = [60200,60500 ,59700 ,59700 ,59100 ,59700 ,59700 ,58900 ,56800]
close = [61800,60700 ,60500 ,59900 ,59700 ,60400 ,61100 ,59500 ,58900]

위 5개 리스트를 하나의 그룹으로 합치는 코드는 아래와 같습니다.

zipData = zip(date, open, high, low, close)
print(type(zipData), zipData)

zip 함수의 리턴 type은 'zip' 클래스인데 list, tuple 등 원하는 type으로 변경이 가능합니다.

위 코드의 실행 결과
<class 'zip'> <zip object at 0x0000026797BCE6C8>

 

리스트로 만드려면 list(zipdata) 식으로 타입 변환해 주면 됩니다.

listData = list(zipData)
for i, data in enumerate(listData):
    print(data)
    if (i > 10) :
        break

 

코드의 실행결과는 아래와 같습니다. 코드 한줄로 간단하게 여러 리스트를 모아주어서 아주 편리합니다.

('2020/2/14', 60900, 61900, 60200, 61800)
('2020/2/13', 61200, 61600, 60500, 60700)
('2020/2/12', 60300, 60700, 59700, 60500)
('2020/2/11', 59800, 60700, 59700, 59900)
('2020/2/10', 59200, 59800, 59100, 59700)
('2020/2/7', 61100, 61200, 59700, 60400)
('2020/2/6', 60100, 61100, 59700, 61100)
('2020/2/5', 60000, 60200, 58900, 59500)
('2020/2/4', 57100, 59000, 56800, 58900)

 

zip으로 묶은 데이터는 다시 원래대로 분해시킬 수 있습니다. 

분해시킬 때는 zip(*list data) 식으로 하면 되는데 아래 코드처럼 하면 됩니다.

date2, open2, high2, low2, close2 = zip(*listData)

print('date2:', type(date2), date2)
print('close2:', type(close2), close2)

 

마지막 코드를 수행한 결과는 아래와 같습니다.

date2: <class 'tuple'> ('2020/2/14', '2020/2/13', '2020/2/12', '2020/2/11', '2020/2/10', '2020/2/7', '2020/2/6', '2020/2/5', '2020/2/4')
close2: <class 'tuple'> (61800, 60700, 60500, 59900, 59700, 60400, 61100, 59500, 58900)

 

1 2 3 4 5 6 7 8 9 ··· 31