zip() 함수란??
zip 함수는 여러 개의 순회 가능한 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플 형태로 반환합니다
저는 zip 함수를 보면 압축 파일 형태가 생각나는데요 이렇게 생각하시면 이해하시기 쉬울것입니다
score = [70,65,90]
name = ['철수','영희','진수']
for pair in zip(score,name):
print(pair)
위 코드를 실행하면 이러한 결과물이 나옵니다
(70, '철수')
(65, '영희')
(90, '진수')
감이 오시나요?? 같은 인덱스에 있는 데이터를 묶어서 짝을 지어줍니다
저장
score = [70,65,90]
name = ['철수','영희','진수']
total_list = list(zip(score,name))
total_dict = dict(zip(score,name))
print(total_list)
print(total_dict)
>> [(70, '철수'), (65, '영희'), (90, '진수')] # total_list
>> {70: '철수', 65: '영희', 90: '진수'} # total_dict
zip으로 묶은 데이터를 원하는 자료형으로 형 변환을 해주면 됩니다. (튜플도 가능합니다)
주의사항
zip 함수로 넘기는 인자의 길이가 다를 경우 가장 짧은 인자 기준으로 데이터가 묶이고 나머지는 버려집니다
score = [70,65,90,100,56]
name = ['철수','영희','진수']
print(list(zip(score,name)))
>> [(70, '철수'), (65, '영희'), (90, '진수')]
score = [70,65,90]
name = ['철수','영희','진수']
total_list = zip(score,name)
print(total_list)
>> <zip object at 0x0000019C38D57900>
형변환을 해주지 않으면 zip 클래스의 객체로 표시됩니다
언패킹(unpacking)
묶인 인자를 다시 풀어줄수 있는데요
score = [70,65,90]
name = ['철수','영희','진수']
total_list = list(zip(score,name))
un_score,un_name = zip(*total_list)
print(un_score,un_name)
>> (70, 65, 90) ('철수', '영희', '진수')
unzip이라는 함수는 존재하지 않구요 오퍼레이터(*)를 사용해 unzip의 효과(?)를 낼 수 있습니다.
응용
score = [70,65,90]
name = ['철수','영희','진수']
total_list = sorted(zip(score,name))
print(total_list)
>> [(65, '영희'), (70, '철수'), (90, '진수')]
데이터를 정렬해 리스트로 반환하는 sorted를 사용해 점수가 낮은 순으로 정렬했습니다. ( sorted는 기본적으로 배열의 첫번째 요소 기준으로 정렬합니다)
score = [70,65,90]
name = ['철수','영희','진수']
total_list = sorted(zip(score,name), key= lambda x : x[1])
print(total_list)
>> [(65, '영희'), (90, '진수'), (70, '철수')]
람다식을 이용해 name 변수 기준으로 정렬도 가능합니다.
'파이썬 > Basic' 카테고리의 다른 글
파이썬 조건문, 반복문, 예외처리 (0) | 2023.03.20 |
---|---|
파이썬 파일 및 폴더 다루기 : OS모듈 (0) | 2022.11.18 |
파이썬 리스트 자료형 정복 (0) | 2022.11.16 |
파이썬 답게 코딩해보자 if condition (0) | 2022.11.13 |
파이썬 답게 코딩해보자 List comprehension (0) | 2022.11.12 |