반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- 코딩독학
- Seaborn
- 오늘도코드잇
- 판다스
- 메소드
- 선형회귀
- 코딩
- 행렬
- pandas
- 코딩공부
- 다항회귀
- HTML
- 데이터분석
- 코드잇
- CSS
- sql연습문제
- matplotlib
- 서브쿼리
- 결정트리
- SQL
- numpy
- 로지스틱회귀
- 경사하강법
- 코드잇 TIL
- 파이썬
- 코드잇TIL
- 윈도우함수
- 나혼자코딩
- for반복문
- 머신러닝
Archives
- Today
- Total
Coding Diary.
(파이썬) 반복문에서 편리하게 사용가능한 zip과 enumerate 내장 함수 본문
728x90
반응형
저번 글에서 for 반복문과 while 반복문에서 break와 continue를 사용하는 방법에 대해 알아보았습니다. 이번 글에서는 반복문에서 편리하게 사용할 수 있는 zip과 enumerate 함수에 대해 알아보겠습니다.
🔻(참고) break, continue 🔻
1. zip
- zip은 다수의 iterable을 조합하여 하나의 튜플 열을 만드는 iterator(반복자)을 리턴합니다.
- 각각의 튜플에는 모든 iterable 에서 나온 위치에 있는 요소들이 담겨 있습니다.
- 요소들을 보려면 리스트로 변환하면 됩니다.
- 예를 들어, 아래와 같이 리스트를 만들기 위해 결합하는 경우 zip 함수를 사용해보겠습니다.
items = ['bananas', 'mattresses', 'dog kennels', 'machine', 'cheeses']
weights = [15, 34, 42, 120, 5]
print(list(zip(items, weights)))
>>> [('bananas', 15), ('mattresses', 34), ('dog kennels', 42), ('machine', 120), ('cheeses', 5)]
- 또는, range로 값들을 출력하려면 for 반복문을 사용하여 순회하면 됩니다.
items = ['bananas', 'mattresses', 'dog kennels', 'machine', 'cheeses']
weights = [15, 34, 42, 120, 5]
for cargo in zip(items, weights):
print(cargo[0], cargo[1])
>>> [('bananas', 15), ('mattresses', 34), ('dog kennels', 42), ('machine', 120), ('cheeses', 5)]
- 반대로, 별표(*)를 사용하여 리스트를 압축을 해제하여 튜플로 만들 수도 있습니다.
manifest = [('bananas', 15), ('mattresses', 34), ('dog kennels', 42), ('machine', 120), ('cheeses', 5)]
items, weights = zip(*manifest)
print(item)
print(weights)
>>> ('bananas', 'mattresses', 'dog kennels', 'machine', 'cheeses')
(15, 34, 42, 120, 5)
- 이런 식으로 항목과 무게로 분리할 수 있습니다.
2. enumerate
- enumerate는 리스트의 인덱스와 값이 담긴 튜플로 이루어진 iterator을 리턴하는 내장 함수입니다.
items = ['bananas', 'mattresses', 'dog kennels', 'machine', 'cheeses']
for i, item in zip(range(len(items)), items):
print(i, item)
>>> 0 bananas
1 mattresses
2 dog kennels
3 machine
4 cheeses
- 위의 코드를 enumerate를 이용하여 훨씬 간단하게 할 수 있습니다.
items = ['bananas', 'mattresses', 'dog kennels', 'machine', 'cheeses']
for i, item in enumerate(items):
print(i, items)
>>> 0 bananas
1 mattresses
2 dog kennels
3 machine
4 cheeses
- enumerate는 이러한 튜플들을 순회할 수 있는 iterable 형식으로 반환하며 해당 튜플들은 리스트의 인덱스들과 리스트의 값을 반환합니다.
3. 연습문제
(1) 아래의 리스트를 label : x, y, z 형태로 만들기
x_coord = [23, 53, 2, -12, 95, 103, 14, -5]
y_coord = [677, 233, 405, 433, 905, 376, 432, 445]
z_coord = [4, 16, -6, -42, 3, -6, 23, -1]
labels = ["F", "J", "A", "Q", "Y", "B", "W", "X"]
points = []
for point in zip(labels, x_coord, y_coord, z_coord):
points.append("{}: {}, {}, {}".format(*point))
for point in points:
print(point)
>>> F: 23, 677, 4
J: 53, 233, 16
A: 2, 405, -6
Q: -12, 433, -42
Y: 95, 905, 3
B: 103, 376, -6
W: 14, 432, 23
X: -5, 445, -1
(2) 아래의 리스트를 딕셔너리로 만들기
cast_names = ["Barney", "Robin", "Ted", "Lily", "Marshall"]
cast_heights = [72, 68, 72, 66, 76]
cast = dict(zip(cast_names, cast_heights))
print(cast)
>>> {'Barney': 72, 'Robin': 68, 'Ted': 72, 'Lily': 66, 'Marshall': 76}
(3) cast 튜플을 names, hieghts로 다시 unzip 하기
cast = (("Barney", 72), ("Robin", 68), ("Ted", 72), ("Lily", 66), ("Marshall", 76))
names, heights = zip(*cast)
print(names)
print(heights)
>>> ('Barney', 'Robin', 'Ted', 'Lily', 'Marshall')
(72, 68, 72, 66, 76)
(4) zip을 transpose 하기
# data는 튜플들의 튜플
data = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11))
# *data = (0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11) 로 언패킹
# zip함수로 동일한 위치에 있는 요소끼리 묶어서 튜플 (0, 3, 6, 9), (1, 3, 7, 10), (2, 5, 8, 11)로 반환
# tuple로 이 결과를 다시 튜플로 변환
data_transpose = tuple(zip(*data))
print(data_transpose)
>>> ((0, 3, 6, 9), (1, 4, 7, 10), (2, 5, 8, 11))
(5) enumerate 로 cast 와 heights 리스트 만들기
cast = ["Barney Stinson", "Robin Scherbatsky", "Ted Mosby", "Lily Aldrin", "Marshall Eriksen"]
heights = [72, 68, 72, 66, 76]
# enumerate 함수를 사용하여 cast 리스트의 각 요소에 대해 인덱스 i와 값 character 가져오기
# 각 캐릭터 이름에 해당 인덱스 키를 문자열로 변환하여 결합한 후 이를 cast 리스트의 해당 위치에 다시 저장
for i, character in enumerate(cast):
cast[i] = character + " " + str(heights[i])
print(cast)
>>> ['Barney Stinson 72', 'Robin Scherbatsky 68', 'Ted Mosby 72', 'Lily Aldrin 66', 'Marshall Eriksen 76']
728x90
반응형
'Coding > Python' 카테고리의 다른 글
(파이썬) def 함수 정의하고 호출하기, 변수 범위 (0) | 2024.06.11 |
---|---|
(파이썬) 리스트 컴프리헨션(List Comprehension)과 사용하는 이유 (0) | 2024.06.10 |
(파이썬) for 반복문과 while 반복문에서 break 와 continue 사용하기 (1) | 2024.06.10 |
(파이썬) while 반복문 개념 및 예시, for 반복문과 차이점 (0) | 2024.06.10 |
(파이썬) for 반복문과 get 메소드로 딕셔너리(dictionary) 만들기, items로 키와 값 쌍 얻기 (1) | 2024.06.08 |