일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- enumerate
- 소수
- BOJ
- ceil
- convention
- 리스트 컴프리헨션
- python
- datetime
- 세그먼트 트리
- SUM()
- FOREIGN KEY
- 2557
- mysql
- 네이밍
- Dictionary
- project euler
- 자료구조
- 에라토스테네스의 체
- itertools
- list comprehension
- 큰 수 나누기
- Codeforces
- floor
- SUM
- 외래키
- timestamp
- lower_case_table_names
- flask
- 파이썬
- 딕셔너리
- Today
- Total
늒네 기록
[python] enumerate()함수에 대하여 본문
파이썬에서 리스트 안에 있는 값들로 작업을 할때 다음과 같은 두 가지 접근 방법이 있을 것이다.
1
2
3
4
5
6
7
8
9
10
|
l = ['x', 'y', 'z']
# list에 인덱스로 접근
for i in range(len(l)):
print(l[i])
# list 아이템에 직접 접근
for s in l:
print(s)
|
cs |
하나는 인덱스로 접근하는 방법, 하나는 아이템에 직접 접근하는 방법. 첫 번째 방법은 내가 몇 번째 인덱스 가지고 작업하고 있는지를 기준으로 생각하기 쉬운 반면, 리스트가 들고있는 아이템 자체로 코드를 짠다는 생각을 하기 어렵다. 예를 들어, 아래와 같은 코드가 있다고 하면,
1
2
3
4
5
6
7
8
9
10
|
group = ['John', 'Kay', 'Sam']
# list에 인덱스로 접근
for i in range(len(group)):
print(group[i])
# list 아이템에 직접 접근
for student in group:
print(student)
|
cs |
아이템에 직접 접근하는 방식이 코드도 더 짧고 의미 전달도 훨씬 잘 된다는 걸 알 수 있다.
다만 이때, 아이템에 직접 접근하는 방식으로는 해당 아이템이 몇 번째 인덱스에 해당하는 건지 알기 힘들다는 큰 단점이 있다. 예를 들어, 위에 있는 group 예시를 다음과 같이 확장해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
team = [
['John', 'Kay', 'Sam'],
['Jaeha', 'Jaeho', 'Jaehoon'],
['Foo', 'Bar', 'Baz']
]
# list에 인덱스로 접근
for i in range(len(team)):
print(f'group {i+1}: {team[i]}')
# list 아이템에 직접 접근
for group in team:
print(f'group ...?: {group}')
|
cs |
team 리스트는 팀 번호 순서대로 팀을 들고있다고 해보자. 그렇다면, 두 번째 방법으로는 팀 안에 있는 그룹들에 각각 접근하는 건 어렵지 않지만, 각 그룹이 몇 번째 그룹인지 알 방법이 없다. 특정 그룹이 몇 번째 인덱스에 해당하는지 알 수 있기만 하다면 딱 좋을텐데.
이때 유용한 함수가 바로 enumerate 함수다. 이 함수는 인자를 두개 받는데, 첫번째는 iterable한 값, 두번째는 시작할 인덱스 값. 참고로 시작할 인덱스 값을 넘겨주지 않으면 자동으로 0부터 시작한다. 이 함수가 해주는 역할은, 인덱스와 iterable한 값(예를 들어 list)에 있는 아이템의 쌍을 순서대로 넘겨준다. 예를 들어, 이런 식이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
team = [
['John', 'Kay', 'Sam'],
['Jaeha', 'Jaeho', 'Jaehoon'],
['Foo', 'Bar', 'Baz']
]
# enumerate
for ind, group in enumerate(team,1):
print(f'group {ind}: {group}')
#group 1: ['John', 'Kay', 'Sam']
#group 2: ['Jaeha', 'Jaeho', 'Jaehoon']
#group 3: ['Foo', 'Bar', 'Baz']
|
cs |
enumerate 함수에 team과 시작할 인덱스 1을 넣어주면, 알아서 team 리스트 내에 있는 아이템에 순서대로 인덱스를 붙여서 넘겨준다. 위의 코드에서 눈치 챘을지 모르겠지만, 리스트에 인덱스로 접근하는 방법을 썼을 때 실제 리스트 인덱스가 0부터 시작하는 바람에 group 번호를 붙일때 i+1을 사용했는데 enumerate의 시작 인덱스를 활용하면 훨씬 보기 깔끔하게 코드가 정리된다.
이것저것 검색해보면서 스택 오버플로우를 돌아다니다 보면 enumerate를 쓰는 것이 파이써닉한 코드를 짤 때 국룰인것 같기도 하다.
'언어 공부 기록 > python' 카테고리의 다른 글
[python] product, permutations, combinations 함수에 대하여 (0) | 2020.10.01 |
---|---|
[python] eval()함수에 대하여 (0) | 2020.09.30 |
[python] sum() 함수에 대하여 (0) | 2020.09.24 |
[python] list comprehension - 2 (0) | 2020.09.12 |
[python] string을 list()하면 어떻게 될까? (0) | 2020.09.11 |