for in iterable, range, enumerate

justyoon·2023년 4월 7일
1

참고자료

1. for in iterable

  • 여타 다른 언어에서는 일반적인 for문, foreach문, for of문등 여러가지 방식을 한꺼번에 지원하는 경우가 많습니다.

  • Python에서는 for in문 한가지 방식의 for 문만 제공합니다.

  • REPL 에서 확인해보겠습니다.

  • for in 문 형식 입니다.

  • iterable은 사전적의미와 똑같이 반복가능한 객체를 말합니다.

  • 루프를 돌거나 for 루프의 도움으로 반복할 수 있는 객체입니다 . 리스트, 튜플, 세트, ​​딕셔너리, 문자열 등과 같은 객체를 이터러블이라고 합니다. 간단하게 iterable은 반복할 수 있는 모든 것입니다
# 예시
for item in iterable:
  ... 반복할 구문...
  • iterable 객체를 판별하기 위해서는 아래의 방법이 있습니다.
  • collections.Iterable에 속한 instance인지 확인하면 됩니다.
  • isinstance 함수는 첫번째 파라미터가 두번째 파라미터 클래스의 instance이면 True를 반환합니다.
>>> import collections

# iterable 한 타입
>>> var_list = [1, 3, 5, 7]
>>> isinstance(var_list, collections.Iterable)
True
>>> var_dict = {"a": 1, "b":1}
>>> isinstance(var_dict, collections.Iterable)
True
>>> var_set = {1, 3}
>>> isinstance(var_set, collections.Iterable)
True
>>> var_str = "abc"
>>> isinstance(var_str, collections.Iterable)
True
>>> var_bytes = b'abcdef'
>>> isinstance(var_bytes, collections.Iterable)
True
>>> var_tuple = (1, 3, 5, 7)
>>> isinstance(var_tuple, collections.Iterable)
True
>>> var_range = range(0,5)
>>> isinstance(var_range, collections.Iterable)
True

# iterable하지 않은 타입
>>> var_int = 932
>>> isinstance(var_int, collections.Iterable)
False
>>> var_float = 10.2
>>> isinstance(var_float, collections.Iterable)
False
>>> var_none = None
>>> isinstance(var_none, collections.Iterable)
False
  • 앞서 다룬 타입 중 list, dictionary, set, string, tuple, bytes가 iterable한 타입입니다.

  • range도 iterable 합니다. 이번 포스트 아래쪽에서 다루겠습니다.

  • for문을 동작시켜봅니다.

>>> for i in var_list:
...     print(i)
... 
1
3
5
7
>>> for i in var_dict:
...     print(i)
... 
a
b
>>> for i in var_set:
...     print(i)
... 
1
3
>>> for i in var_str:
...     print(i)
... 
a
b
c
>>> for i in var_bytes:
...     print(i)
... 
97
98
99
100
101
102
>>> for i in var_tuple:
...     print(i)
... 
1
3
5
7
>>> for i in var_range:
...     print(i)
... 
0
1
2
3
4
  • dictionary의 for문을 다시 보면 key값만 출력됩니다.
  • dictionary의 for문은 dictionary(딕셔너리) 포스팅에서 자세한 내용 확인 가능합니다.

2. range

  • 위쪽 for문의 range 결과 값이 0, 1, 2, 3, 4 순서대로 결과 값이 출력되었습니다.
  • range는 range(시작숫자, 종료숫자, step)의 형태로 리스트 슬라이싱과 유사합니다.
  • range의 결과는 시작숫자부터 종료숫자 바로 앞 숫자까지 컬렉션을 만듭니다.
  • 시작숫자와 step은 생략가능합니다.
>>> range(5)
range(0, 5)
>>> for i in range(5):
...     print(i)
... 
0
1
2
3
4
  • range는 값을 확인하기 위해서 다른 순서 있는 컬렉션으로 변환해야합니다.
>>> range(5,10)
range(5, 10)
>>> list(range(5,10))
[5, 6, 7, 8, 9]
>>> tuple(range(5,10))
(5, 6, 7, 8, 9)
  • step을 사용해봅니다.
>>> list(range(10,20,2))
[10, 12, 14, 16, 18]
>>> list(range(10,20,3))
[10, 13, 16, 19]
  • 파이썬에서 권장하지 않는 패턴입니다.
>>> s = [1, 3, 5]
>>> for i in range(len(s)):
...     print(s[i])
... 
1
3
5
  • 파이썬에서 권장하는 패턴
>>> for v in s:
...     print(v)
... 
1
3
5

3. enumerate

  • 반복문 사용 시 몇 번째 반복문인지 확인이 필요할 수 있습니다. 이때 사용합니다.
  • 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환합니다.
>>> t = [1, 5, 7, 33, 39, 52]
>>> for p in enumerate(t):
...     print(p)
... 
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)
  • tuple형태 반환을 이용하여 아래처럼 활용할 수 있습니다.
>>> for i, v in enumerate(t):
...     print("index : {}, value: {}".format(i,v))
... 
index : 0, value: 1
index : 1, value: 5
index : 2, value: 7
index : 3, value: 33
index : 4, value: 39
index : 5, value: 52
profile
with gratitude, optimism is sustainable

0개의 댓글