모든 언어에서 반복문은 중요하다.
가장 먼저 배우는 문법이 변수선언 뒤에 반복문이니까.
자바 개발자인 아는 분께서 반복문에 인덱스를 다음과 같이 작성한 것을 보고
포스팅한다.
enumerate
i = 0
for item in items:
...
...
...
i += 1
위의 코드가 잘못되었다는 말이 아니다.
어디까지나 직관적인 코드고, 파이썬스럽지 않을뿐이니까.
자 위의 코드를 좀 더 파이썬스럽게 고쳐보자
for i,item in enumerate(items):
...
...
...
i를 선언하고 더해주는 과정 필요없이, enumerate라는 메서드를 사용하면
하나의 루프가 돌 때마다 i가 1씩 추가된다.
루프를 도는데 인덱스가 필요하다면 이런식으로 코드를 짜보자.
zip
우리에게 친숙한 압축 확장자 zip이다.
이 또한 반복문에서 유용하게 사용 가능하다.
subject = ['국어','영어','수학','사회']
score = [87,94,100,64]
for i in zip(subject,score):
print(*i)
#국어 87
#영어 94
#수학 100
#사회 64
과목을 담은 리스트 subject / 점수를 담은 리스트 score 가 있다고 할 때,
과목 - 점수를 반복문으로 출력하고자 하면 위와 같이 적어주면 된다.
물론
for i in range(len(subject)):
print(subject[i],score[i])
#국어 87
#영어 94
#수학 100
#사회 64
와 같이 만들 수도 있다.
우리는 과목 - 점수 리스트의 길이가 동일하다는 것을 알고 있으므로
아래에 배열의 길이로 인덱싱하는 경우를 사용할 수 있지만,
만약 두 리스트의 길이가 다르다면 list index out of range 에러를 볼 수 있다.
zip 메서드를 사용하면, 쌍이 맞는 인덱스까지만 매칭한다.
위에서는 두가지 리스트만 zip에 넣어줬다. 세 개 이상을 넣을 수 있을까?
있다.
subject = ['국어','영어','수학','사회']
score = [87,94,100,64]
grade = ['B+','A','A+','C']
for i in zip(subject,score,grade):
print(*i)
#국어 87 B+
#영어 94 A
#수학 100 A+
#사회 64 C
세개도 된다. 여기서도 물론 세 쌍이 모두 맞아야 반복문에 들어가고 출력한다.
추가적으로 zip으로 반복문을 묶어주면 기본적인 return은 tuple이다.
print문 앞에 *를 넣어주면 unzip
즉 튜플형태를 풀어주므로 예쁘게 출력된다.
print(*i) 하지 않고, print(i)를 하게되면,
('국어', 87, 'B+')
('영어', 94, 'A')
('수학', 100, 'A+')
('사회', 64, 'C')
이런 형태가 출력된다.
앞선 포스트 리스트 컴프리헨션에서도 응용이 가능한데,
student = ['김XX','이OO','박OX','최XO']
list_ = [i for i in enumerate(student)]
#[(0, '김XX'), (1, '이OO'), (2, '박OX'), (3, '최XO')]
이런식으로 각각의 이름에 인덱스를 넣은 배열을 넣어준다던지,
student = ['김XX','이OO','박OX','최XO']
list_ = [i for i in zip(range(10),student)]
이렇게 zip으로 range를 통해서 넣어줄 수 있다. 모두 같은 결과를 내뱉는다.
'python > 기초' 카테고리의 다른 글
[파이썬 기초] if ~ else (0) | 2021.11.23 |
---|---|
[파이썬 기초] Class / 함수 (args,kwargs) (2) | 2021.10.13 |
[python 기초] bytesIO를 메모리로 읽어서 해체하자. (0) | 2021.10.12 |
[파이썬 기초] try ~ except문 (0) | 2021.09.07 |
[파이썬 기초] 리스트 컴프리헨션 (0) | 2021.08.17 |