1. 이터러블과 이터레이터
1. 이터러블(iterable)
이터러블은 for문처럼 반복문에서 사용할 수 있는 모든 객체를 의미합니다. 이터러블한 객체는 for item in 객체: 구조에서 사용 가능합니다. 모든 순서 있는 컬렉션은 이터러블입니다. 하지만 모든 이터러블이 순서 있는 것은 아닙니다. (set, dict.keys()는 반복은 되지만 인덱스가 없음)
2. 이터레이터(Iterator)
이터러블 객체는 iter() 함수를 사용해서 이터레이터로 바꿀 수 있습니다. 또한 next()를 사용해서 값을 하나씩 꺼낼 수 있습니다.
| 이터러블 | iter()를 적용할 수 있는 객체 | 리스트, 튜플, 문자열 등 |
| 이터레이터 | next()로 값을 꺼낼 수 있는 객체 | iter(리스트)로 만든 것 |
numbers = [10, 20, 30]
# 이터러블 -> 이터레이터로 변환
iterator = iter(numbers)
# next()로 값을 하나씩 꺼냄
print(next(iterator))
print(next(iterator))
print(next(iterator))
# print(next(iterator)) # → 여기서 더 꺼내면 StopIteration 예외 발생
2. 리스트와 for 문
li1 = ['apple', 'banana', 'orange', 'melon']
for i in li1:
print(i, end=' ')
# 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}명입니다')
# 리스트에서 길이가 5 이상인 문자열만 출력
words = ["apple", "hi", "banana", "go", "mango"]
for word in words:
if (length := len(word)) >= 5:
print(f"{word} (길이: {length})")
3. 딕셔너리와 for 문
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=' ')
print()
for i in dic1.items():
print(i)
for key, value in dic1.items():
print(key, value)
4. 컴프리헨션(Comprehension)
컴프리헨션(Comprehension)은 파이썬에서 리스트, 세트, 딕셔너리 등의 컬렉션을 간단하게 생성하거나 변형하는 방법 중 하나입니다. 컴프리헨션은 반복문과 조건문을 사용하여 간결하게 컬렉션을 생성하는 기법으로, 코드를 더 간단하고 가독성 좋게 작성할 수 있도록 도와줍니다.
1. 리스트 컴프리헨션
리스트 컴프리헨션은 새로운 리스트를 생성하는데 사용됩니다. 기존 리스트의 각 요소를 반복하면서 조건을 적용하여 새로운 리스트를 생성할 수 있습니다.
n = 10
result = [0 for i in range(n)]
print(result)
result = [i for i in range(n)]
print(result)
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)
li = ['apple', 'banana', 'orange', 'melon']
result = [len(str1) for str1 in li]
print(result)
result = [n for n in range(10) if n % 2 == 0]
print(result)
# 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장하기
li = [-1, 0, -4, 24, 5, -10, 2, 20]
result = [n if n>0 else 0 for n in li]
print(result)
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)
2. 세트 컴프리헨션
세트 컴프리헨션은 새로운 세트를 생성하는데 사용됩니다. 기존 세트의 각 요소를 반복하면서 조건을 적용하여 새로운 세트를 생성할 수 있습니다.
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)
3. 딕셔너리 컴프리헨션
딕셔너리 컴프리헨션은 새로운 딕셔너리를 생성하는데 사용됩니다. 기존 딕셔너리의 키와 값을 반복하면서 조건을 적용하여 새로운 딕셔너리를 생성할 수 있습니다.
names = ['apple', 'banana', 'orange']
name_lengths = {name:len(name) for name in names}
print(name_lengths)