초기질문
iterable 의 의미는 member를 하나씩 차례로 반환 가능한 object를 의미
iterable 예로는 sequence type을 가지는 list, str, tuple 대표적인 예이다.
sequence type이란?
데이터에 순서(번호)를 붙여 나열한 것
시퀀스 컬렉션의 종류
리스트(list), 튜플(tuple), 레인지(range), 문자열(string) 등이 여러 가지 시퀀스 컬렉션을 제공
시퀀스에서의 데이터 순서
💡 가변 데이터와 불변 데이터데이터 유형은 내용의 수정이 허용되는 것과 금지되는 것으로도 분류가 된다.
리스트는 값을 변경할 수 있는 가변(mutable) 데이터다. number_list[2] = '-3'
처럼 내용을 수정하는 연산이 가능하다.
반면, 값을 변경할 수 없는 불변(immutable) 데이터도 있다. 불변 데이터에는 수, 튜플, 문자열 등이 있다. number = 10
을 저장한 후 number += 1
을 실행하면 number
의 값은 11
로 변한다. 하지만 number
가 가리키는 값이 바뀌었을 뿐, 10
이 11
이 된 것은 아니다.
Iterator 는 next() 메소드로 데이터를 순차적으로 호출 가능한 object
💡 next()로 다음 데이터를 불러올 수 없을 경우 StopIteration exception 발생iterable ≠ iterator
x = [1,2,3]
next(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator
list 는 iterable 이지만, 위와 같이 next() 메소드로 호출해도 동작하지 않음.
💡 iterable 을 iterator 로 변환하고 싶다면, iter() 라는 built-in function 을 사용함.Iterable보다 Iterator를 사용하는 편이 메모리 효율이 더 좋음
comprehension의 사전적 의미
for문을 활용한 list comprehension
[i for i in range(5)]
List Comprehension의 기본 구조
단일 if 문을 포함한 List Comprehension
[i for i in range(5) if i % 2 == 0]
2로 나눈 나머지가 1이면 해당 i를 리스트에 생성하라는 의미
⇒ [0, 2, 4]
if와 else문을 포함한 List Comprehension
[i if i % 2 == 0 else None for i in range(5) ]
⇒ [0, None, 2, None, 4]
중첩 for문을 포함한 List Comprehension
[i*j for i in range(1,6) for j in range(7,10)]
for 문 뒤에 for 문을 계속 쓰는 경우 앞의 for 문의 원소에 대해서 그 다음 for 문의 원소를 순차적으로 적용한 결과
Dictionary Comprehension (딕셔너리 내포))