Skip to content

2.04. 내용정리: 4일차

흔한 찐따 edited this page Mar 15, 2022 · 1 revision

반복문

반복문이란 특정 조건이 참인 경우 계속해서 반복되는 구문을 나타낸 요소이며, while , for , 그리고 break 키워드를 통해서 반복을 끝낼 수 있다. 반복이 끝나면 무조건 수행하는 else 키워드를 사용할 수 있으며, else 키워드의 사용 여부는 선택 사항이다.

while 문

예시

a = 1
# a가 10보다 작은 경우에는 계속 수행된다.
while a < 10:
    a = a + 1
else:
    print('done!')

break

break 키워드는 반복문을 중단시킨다.

예시

a = 1
while a < 10:
    a = a + 1
    # a가 5일 경우에는 반복문을 중단한다.
    if a == 5:
        print('break')
        break
else:
    print('done!')

continue

continue 키워드는 반복문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우 사용한다.

예시

a = 1
while a < 10:
    a = a + 1
    if a % 2 == 0:
        print('continue')
        continue
    print(a)

for 문

while 문을 좀 더 사용하기 편하고 단순하게 표현하기 위해 존재하는 문법이다.

여러 개의 요소를 가지는 컨테이너 타입, range 타입과 주로 같이 사용되며, 차례대로 요소를 순회한다.

예시

for i in range(1, 11):
    print('i:', i)
    if i == 5:
        print('break')
        break
else:
    print('done!')

또 한가지 예시로 리스트에 요소를 추가할 때 아래처럼 사용이 가능하다.

x = []
for i in range(1, 10):
    x.append(i)
else:
    print(x)

컴프리헨션

컨테이너 타입을 선언할 때 규칙성을 가진 요소들을 한꺼번에 선언하고 싶을때 for 문을 통해 선언하는 방식을 컴프리헨션이라고 한다.

일반적인 for 문을 사용해서 요소를 추가하는 방식보다 성능이 더 좋다고 한다.

리스트 컴프리헨션

  • for 키워드를 한번만 사용하여 요소를 추가시키는 경우
y = [x for x in range(1, 11)]
print(y)
  • for 키워드를 여러 번 사용하여 요소를 추가시키는 경우
z = [(x, y) for x in range(1, 11) for y in range(1, 11)]
print(z)
  • for 키워드와 if 키워드를 같이 사용하는 경우 (특정 조건만을 만족시키는 요소만 추가시키는 경우)
# 짝수만 갖도록 하는 경우
y = [x for x in range(1, 11) if x % 2 == 0]
print(y)
  • if 키워드를 동시에 여러번 사용하는 경우
# 아래처럼 and 키워드로 대체해서 사용하는 것도 가능하다.
# y = [x for x in range(1, 11) if x % 2 == 0 and x <= 6]
y = [x for x in range(1, 11) if x % 2 == 0 if x <= 6]
print(y)

제네레이터 (Generator)

튜플을 컴프리헨션을 통해 선언하게 되면 제네레이터 (generator) 타입이 된다.

제네레이터의 특징은 다음과 같다.

  • next 함수를 통해 첫번째부터 값을 하나씩 차례대로 불러낼 수 있다.
  • next 함수를 통해 불러낸 첫번째 값은 제네레이터 내에서 값이 삭제되며, 메모리에서 해제된다.
  • 메모리 주소값을 활용하므로 속도가 굉장히 빠르며, 메모리를 아낄 수 있다는 장점이 있다.
예시
  • 선언
y = (x for x in range(1, 11))
print(y)
print(type(y))
  • for 문 사용
y = (x for x in range(1, 11))
for x in y:
    print(x)
  • next 함수를 통해 가져오는 방식
y = (x for x in range(1, 11))

# while의 조건식에 True를 하면 항상 참이므로 무한 루프가 된다.
while True:
    x = next(y)
    print(x)
    if x == 5:
        break