Python - Loops

jinatra·2021년 7월 13일
0

Loops


Loop의 필요성

단순히 list 내에 있는 element를 출력하고자 할 때, 기존에 배웠던 내용으로는 효율적으로 코드를 작성하기 어렵다

아래 예시와 같이 가능은 하지만.. 만약 2억개의 element를 출력하려면 매우 힘든 작업이 될 것이다

squad = ['Leno', 'Tierny', 'Partey', 'Saka', 'Rowe', 'Pepe']

print(squad[0])
print(squad[1])
print(squad[2])
print(squad[3])
print(squad[4])
print(squad[5])

# Output: Leno
# Output: Tierny
# Output: Partey
# Output: Saka
# Output: Rowe
# Output: Pepe

For Loops: Introduction

for

for 루프를 통해 특정 객체의 원소에 하나씩 차례로 접근할 수 있다

for <temporary variable> in <collection>:
  <action>

1) for → for loop 실행을 위한 문구
2) <temporary variable> → 현재 for loop가 실행중인 객체에 설정하는 임시 변수
3) in<temporary variable><collection> 분리 목적
4) <collection> → loop over을 위한 리스트, 튜플, 문자열 등
5) <action> → loop의 원소들에 취하는 행위

squad = ['Leno', 'Tierny', 'Partey', 'Saka', 'Rowe', 'Pepe']

for arsenal_player in squad:
    print(arsenal_player)

# Output: Leno
# Output: Tierny
# Output: Partey
# Output: Saka
# Output: Rowe
# Output: Pepe

For Loops: Using Range

forrange()를 이용하여 정수 범위를 표현하고, 범위의 갯수만큼 출력 가능
<temporary variable> 자체를 출력할 수도 있고,
<temporary variable>를 임시변수로 두고 미리 설정해둔 변수를 이용할 수도 있다.

for n in range(3):
    print(n)

# Output: 0
# Output: 1
# Output: 2

# 임시변수 n을 정수범위 0~2까지 설정
for back_number in range(5):
    print("Today, Number " + str(back_number + 1) + " will play.")

# Output: Today, Number 1 will play.
# Output: Today, Number 2 will play.
# Output: Today, Number 3 will play.
# Output: Today, Number 4 will play.
# Output: Today, Number 5 will play.

# 임시변수 back_number을 정수범위 0~4까지 설정
comment = "Play hard!"

for temp in range(3):
    print(comment)

# Output: Play hard!
# Output: Play hard!
# Output: Play hard!

While Loops: Introduction

while

특정 조건 하에 만족하는 동안만 실행하고자 하는 경우에 사용

while <conditional statement>:
  <action>

1) while → while loop 실행을 위한 문구
2) <conditional statement> → 사용하고자 하는 조건
3) <action> → loop의 원소들에 취하는 행위

아래 예시를 보면,

number = 0
while number <= 3:
    print('You can play today, number ' + str(number + 1) + '.')
    number += 1
print('Sorry we are full now')

# Output: You can play today, number 1.
# Output: You can play today, number 2.
# Output: You can play today, number 3.
# Output: You can play today, number 4.
# Output: Sorry we are full now

1) 0에서 시작
2) number이 3 이하면 조건 실행 (첫번째 문구 출력)
3) number += 1 (이후 number이 1씩 증가후 while문 재실행)
4) while문 실행이 종료되면 두번째 문구 출력


Infinite Loops (무한 루프)

끝나지 않고 실행되는 루프를 Infinite Loops(무한 루프)라고 한다.

squad = ['Leno', 'Tierny', 'Partey', 'Saka']
number = 0

while number < len(squad):
    print(squad[number])
print('Cut Line')

# Output: Leno
# Output: Leno
# Output: Leno
# ...

# number += 1 등의 조건이 생략되어 while문의 조건이 항상 충족되는 상태 → 무한 루프

Loop Control: Break

break

파이썬의 반복문(for문 또는 while문)에서 빠져나오고자할 때 사용하는 키워드 (무한루프 방지용)

squad = ['Leno', 'Tierny', 'Partey', 'Saka', 'Rowe', 'Pepe']

print('Let me find the player you are looking for')

for player in squad:
    if player == 'Saka':
        print('He\'s in the training camp now!')
        break

# Output: Let me find the player you are looking for
# Output: He's in the training camp now!

# break 존재 → 실행 O, Saka 발견 이후 실행 중지
# break 삭제 → 실행 O, Saka 발견 이후 뒤에 있는 Rowe, Pepe까지 탐색 
while 1:
    print('Get ya!')
    break

# Output: Get ya!

# 1은 참값으로 간주되므로, break가 없다면 Get ya!가 무한히 출력되는 무한 루프가 시동
# 허나 break가 있으므로, 한번의 시행만으로 만족

Loop Control: Continue

continue

다음 loop로 넘어가고자할 때 사용

# continue가 있을 때

number_list = [1, -5, 8, -2, 11, -25]

for number in number_list:
    if number < 0:
        print(number)
        continue
    print('plus')

# Output: plus
# Output: -5
# Output: plus
# Output: -2
# Output: plus
# Output: -25

# 변수 number이 음수일때 변수를 출력하고, continue가 있기에 다음 loop로 넘어감
# 여기선 다음 loop가 없으므로, number이 음수일때에는 'plus' 출력을 안함
# continue가 없을 때

number_list = [1, -5, 8, -2, 11, -25]

for number in number_list:
    if number < 0:
        print(number)
    print('plus')

# Output: plus
# Output: -5
# Output: plus
# Output: plus
# Output: -2
# Output: plus
# Output: plus
# Output: -25
# Output: plus

# 변수 number가 음수일때 변수를 출력하고, continue가 없기에 바로 'plus' 출력

Nested Loops (중첩 루프)

루프끼리는 중첩이 가능

squad = [['Leno', 'Tierny', 'Partey'], ['Saka', 'Rowe'], ['Pepe']]

for session in squad:
    print(session)

for session in squad:
    for player in session:
        print(player)

# Output: ['Leno', 'Tierny', 'Partey']
# Output: ['Saka', 'Rowe']
# Output: ['Pepe']

# Output: Leno
# Output: Tierny
# Output: Partey
# Output: Saka
# Output: Rowe
# Output: Pepe

# squad 변수를 중첩을 통하여 두번의 loop로 표현
sales_data = [[12, 17, 22], [2, 10, 3], [5, 12, 13]]

scoops_sold = 0

for location in sales_data:
  print(location)
  for element in location:
    scoops_sold += element
    
print(scoops_sold)

# Output: [12, 17, 22]
# Output: [2, 10, 3]
# Output: [5, 12, 13]
# Output: 96

List Comprehensions: Introduction

loop의 for문을 간단하게 한 문장으로 표현할 수 있다

new_list = [<expression> for <element> in <collection>]
back_number = range(5)

practice_game_back_number = [number + 10 for number in back_number]

print(practice_game_back_number)

# Output: [10, 11, 12, 13, 14]
# back_number에 10을 더하여 새로운 list인 practice_game_back_number 생성

List Comprehensions: Conditionals

loop의 for문에 조건을 부여할 때에도 간단하게 표현 가능

new_list = [<expression> for <element> in <collection> if <condition>]
number_list = [-1, 2, -4, 8]

make_negative_positive = [number * -1 for number in number_list if number < 0]

print(make_negative_positive)

# Output: [1, 4]
# number_list 내 element를 number로 지정 후, number < 0의 조건 부여




Take Away

breakcontinue 의 차이

공부하며 헷갈렸던 부분인데, 아래와 같이 정리할 수 있을 듯 하다.

  • breakbreak문을 만나게 되면 거기서 종료 후 빠져나옴
  • continuecontinue문을 만나게 되면 다음 loop로 진행

for문 요약

제일 아래 두개의 요약본은 반드시 외워둬야할 것 같다.
이러한 요약 코드들을 읽을 줄 알아야 나중에 도움이 되지 않을까?

profile
으악

0개의 댓글