for문처럼 반복문에서 사용할 수 있는 모든 객체를 의미한다.
이터러블한 객체는 for item in 객체: 구조에서 사용 가능하다.
모든 순서 있는 컬렉션은 이터러블이지만, 모든 이터러블이 순서 있는 것은 아니다.
(set, dict.keys()는 반복은 되지만 인덱스가 없음)
이터러블 객체는 iter() 함수를 사용해서 이터레이터로 바꿀 수 있다.
또한 next()를 사용해서 값을 하나씩 꺼낼 수 있다.
numbers = [10, 20, 30]
# 이터러블 -> 이터레이터로 변환
iterator = iter(numbers)
# next()로 값을 하나씩 꺼냄
print(next(iterator))
print(next(iterator))
print(next(iterator))
# print(next(iterator)) # → 여기서 더 꺼내면 StopIteration 예외 발생
10
20
30
li1 = ['apple', 'banana', 'orange', 'melon']
for i in li1:
print(i, end=' ')
apple banana orange melon
# score 리스트에 저장된 점수가 60점 이상인 학생이 몇명인지 확인
score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
count = 0
for i in score :
if i >= 60:
count += 1
print(f'60점 이상인 학생의 수는 {count}명 입니다')
60점 이상인 학생의 수는 5명 입니다
→ score 안을 i가 하나씩 증가하며 돌아다니다가 i가 60보다 큰 수가 발견되면 count 1 증가!
dic1 = {'no':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
for i in dic1:
print(i, end=' ') # 키만 복사
print()
for i in dic1.keys():
print(i, end=' ') # 키만 복사
print()
for i in dic1.values():
print(i, end=' ') # 값만 복사
print()
for i in dic1:
print(dic1[i], end=' ') # 키를 복사하여 값을 반환
print()
for i in dic1:
print(dic1.get(i), end=' ')
no userid name hp
no userid name hp
1 apple 김사과 010-1111-1111
1 apple 김사과 010-1111-1111
1 apple 김사과 010-1111-1111
for i in dic1.items(): # items() 딕셔너리에 있는 keys와 values를 튜플로 가져옴.
print(i)
('no', 1)
('userid', 'apple')
('name', '김사과')
('hp', '010-1111-1111')
for key, value in dic1.items():
print(key, value)
no 1
userid apple
name 김사과
hp 010-1111-1111
n = 10
result = [0 for i in range(n)]
print(result)
result = [i for i in range(n)]
print(result)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
li = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
result = [n for n in li]
print(result)
result = [n*2 for n in li]
print(result)
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
[20, 40, 60, 80, 100, 120, 140, 160, 180, 200]
위 result는 n을 n만큼 반복하여 출력. n은 li 안에 있는 숫자들 의미.
위 result는 n*2을 n만큼 반복하여 출력. n은 li 안에 있는 숫자들 의미.
li = ['apple', 'banana', 'orange', 'melon']
result = [len(str1) for str1 in li]
print(result)
[5, 6, 6, 5]
li 안에 값을 str1이라고 하고, str1의 길이를 len(str1)이라고 함.
각각의 문자열의 길이 출력
result = [n for n in range(10) if n % 2 == 0]
print(result)
[0, 2, 4, 6, 8]
range(10) 안의 수 n이 2로 나누어떨어지면, n출력
# 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장하기
li = [-1, 0, -4, 24, 5, -10, 2, 20]
result = [n if n>0 else 0 for n in li]
print(result)
[0, 0, 0, 24, 5, 0, 2, 20]
li 안에 있는 n들 중에 n이 양수이면 그대로 출력, 음수이면 0으로 변환해서 출력
li = []
for i in range(1, 4):
for j in range(1, 3):
li.append(i * j)
print(li)
li = [i*j for i in range(1, 4) for j in range(1, 3)]
print(li)
[1, 2, 2, 4, 3, 6]
[1, 2, 2, 4, 3, 6]
위,아래 코드 출력 결과는 같지만,
위 코드는 for 중첩 반복문을 통해 작성되었고,
아래 코드는 컴프리헨션을 통해 작성되었다.
컴프리헨션을 통해 짠 코드가 더 간결하다.
li = [1, 2, 3, 4, 5, 2, 3, 4]
unique_numbers = set(li)
print(unique_numbers)
li = [1, 2, 3, 4, 5, 2, 3, 4]
unique_numbers = {x for x in li}
print(unique_numbers)
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
set는 중복 불가능이었다.
li에 있는 수 x를 unique_numbers로 출력
names = ['apple', 'banana', 'orange']
name_lengths = {name:len(name) for name in names}
print(name_lengths)
{'apple': 5, 'banana': 6, 'orange': 6}
names에 있는 name의 길이를 확인하여, name:len(name) 형태로 출력