RL Researcher

05. for in 반복문, Range, enumerate 본문

AI Basic/Python Programming

05. for in 반복문, Range, enumerate

Lass_os 2021. 1. 4. 09:49

1. for in 반복문


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

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

for item in iterable:
  ... 반복할 구문...
  • iterable 객체를 판별하기 위해서는 아래의 방법이 있습니다.

  • collections.Iterable에 속한 instance인지 확인하면 됩니다.

  • isinstance 함수는 첫번째 파라미터가 두번째 파라미터 클래스의 instance이면 True를 반환합니다.

import collections

# iterable 한 타입
var_list = [1, 3, 5, 7]
print(isinstance(var_list, collections.Iterable))

========================================================================

<output>
True


var_dict = {"a": 1, "b":1}
print(isinstance(var_dict, collections.Iterable))

========================================================================

<output>
True


var_set = {1, 3}
print(isinstance(var_set, collections.Iterable))

========================================================================

<output>
True


var_str = "abc"
print(isinstance(var_str, collections.Iterable))

========================================================================

<output>
True


var_bytes = b'abcdef'
print(isinstance(var_bytes, collections.Iterable))

========================================================================

<output>
True


var_tuple = (1, 3, 5, 7)
print(isinstance(var_tuple, collections.Iterable))

========================================================================

<output>
True


var_range = range(0,5)
print(isinstance(var_range, collections.Iterable))

========================================================================

<output>
True

# iterable하지 않은 타입
var_int = 932
print(isinstance(var_int, collections.Iterable))

========================================================================

<output>
False


var_float = 10.2
print(isinstance(var_float, collections.Iterable))

========================================================================

<output>
False


var_none = None
print(isinstance(var_none, collections.Iterable))

========================================================================

<output>
False
  • 앞서 다룬 타입 중 list, dictionary, set, string, tuple, bytes가 iterable한 타입입니다. range도 iterable 합니다. 

for i in var_list:
	print(i)

========================================================================

<output>
1
3
5
7


for i in var_dict:
	print(i)

========================================================================

<output>
a
b


for i in var_set:
	print(i)

========================================================================

<output>
1
3


for i in var_str:
	print(i)

========================================================================

<output>
a
b
c


for i in var_bytes:
	print(i)

========================================================================

<output>
97
98
99
100
101
102


for i in var_tuple:
	print(i)

========================================================================

<output>
1
3
5
7


for i in var_range:
	print(i)

========================================================================

<output>
0
1
2
3
4
  • dictionary의 for문을 보면 key값만 출력됩니다.

for i in var_dict:
	print(i)

========================================================================

<output>
a
b

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)

========================================================================

<output>
0
1
2
3
4
  • range는 값을 확인하기 위해서 다른 순서 있는 컬렉션으로 변환해야합니다.

print(range(5,10))

========================================================================

<output>
range(5, 10)


print(list(range(5,10)))

========================================================================

<output>
[5, 6, 7, 8, 9]


print(tuple(range(5,10)))

========================================================================

<output>
(5, 6, 7, 8, 9)
  • step을 사용해봅니다.

print(list(range(10,20,2)))

========================================================================

<output>
[10, 12, 14, 16, 18]


print(list(range(10,20,3)))

========================================================================

<output>
[10, 13, 16, 19]
  • 파이썬에서 권장하지 않는 패턴입니다.

 s = [1, 3, 5]
for i in range(len(s)):
	print(s[i])

========================================================================

<output>
1
3
5
  • 파이썬에서 권장하는 패턴

for v in s:
	print(v)
    
========================================================================

<output>

1
3
5

3. enumerate


  • 반복문 사용 시 몇 번째 반복문인지 확인이 필요할 수 있습니다. 이때 사용합니다.

  • 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환합니다.

t = [1, 5, 7, 33, 39, 52]
for p in enumerate(t):
	print(p)

========================================================================

<output>
(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))

========================================================================

<output>
index : 0, value: 1
index : 1, value: 5
index : 2, value: 7
index : 3, value: 33
index : 4, value: 39
index : 5, value: 52

'AI Basic > Python Programming' 카테고리의 다른 글

14. Set(집합)  (0) 2021.01.03
13. Dictionary(딕셔너리)  (0) 2021.01.03
12. 튜플(tuple)  (0) 2021.01.03
15. 함수(function)  (0) 2020.12.27
11. 리스트(List) - 5 - 리스트 정렬  (0) 2020.12.25
Comments