python 제어문(if), list-comprehension

|

패스트캠퍼스 웹 프로그래밍 수업을 듣고 중요한 내용을 정리했습니다.
개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
이 포스팅에서는 python 제어문에 대해 설명합니다.


제어문 (if, else, elif)

ifelse는 조건이 참인지, 거짓인지 판단하는 파이썬 선언문이며, elif는 else내 if를 중첩해야할 때 사용한다.

# 기본적으로 if와 else는 이런 방식으로 쓰이고
if 조건:
	조건이 참일 경우
else:
	조건이 거짓일 경우

# 아래와 같이 if-else구문내 또 if-else구문이 중첩되어 사용되는 경우
if 조건1:
	조건1이 참일 경우
else:
	조건1이 거짓일 경우

	if 조건2:
		조건1은 거짓이나, 조건2는 참일 경우
	else:
		조건1,2가 모두 거짓일 경우

# 아래와 같이 elif를 사용하여 쓸 수 있다.
if 조건1:
	조건1이 참일 경우
elif 조건2:
	조건1은 거짓이나, 조건2가 참일 경우
else:
	조건1,2가 모두 거짓일 경우

조건 표현식

참일경우 if 조건식 else 거짓일 경우
  • is_holidayTrue또는 False값을 할당한 후, if문과 조건표현식을 사용해서 각각 ‘Good’과 ‘Bad’를 출력하는 코드를 짜본다.
is_holiday = False

# if문을 사용한 것
if is_holiday:
  print('good')
else:
  print('bad')

# 조건표현식을 사용한 것
'good' if is_holiday else 'bad'

중첩 조건표현식

# 조건이 2개일 경우
조건1이 참일경우 if 조건1 else 조건1은 거짓이나 조건2가 참일경우 if 조건2 else 조건1,2가 모두 거짓일 경우
  • vacation에 1에서 10중 아무 값이나 할당 후, if, elif, else문과 중첩 조건표현식을 사용해서 각각 vacation이 7이상이면 ‘Good’, 5이상이면 ‘Normal’, 그 이하면 ‘Bad’를 출력하는 코드를 짜본다.
vacition = 8

# if, elif, else를 사용한 것
if vacation >= 7 :
  pring('good')
elif vacation >= 5 :
  print('nomarl')
else:
  print('bad')

# 중첩 조건표현식을 사용한 것
'good' if vacation >=7 else 'normal' if vacation >=5 else 'bad'

for문 (조건에 따른 순회)

기본 형태

for 항목 in 순회가능(iterable)객체:
   <항목을 사용한 코드>

중첩

for문 안에 for문을 사용할 수 있다.

for 항목1 in iterable객체1:
  iterable객체1을 순회하며 실행할 코드
  for 항목2 in iterable객체2:
    iterable객체1 내부에서 새로운 iterable객체2를 순회하며 실행할 코드

중단하기 (break)

데이터를 순회하던 중, 특정 조건에서 순회를 멈추고 반복문을 빠져나갈 떄 사용한다.

for 항목 in iterable객체:
  (반복문을 중단하고 싶을때)break

위와 같이 중간(break)를 확인하고 싶을 때 else를 사용한다.

for 항목 in iterable객체:
  pass
else:
  break가 한 번도 호출되지 않았을 경우의 코드

만약 for문이 break됐다면 else문이 실행됐을 것이다.

건너뛰기 (continue)

데이터를 순회하던 중, 반복문을 중단하지 않고 다음 반복으로 건너뛸 때 사용한다.

for 항목 in iterable객체:
  (현재의 반복을 중간에 그만두고 다음 반복으로 건너뛰고 싶을 때)continue

숫자 시퀀스 생성 (range)

range()함수는 특정 범위의 숫자 스트림 데이터를 반환한다.

range(start, stop, step)

>>> for x in range(0, 10):
# 0 부터 10까지 순회하라
...   print(x)
...
0
1
2
3
4
5
6
7
8
9

while문 (반복문)

if문과 유사하나, while문 뒤의 조건이 참일 경우 계속해서 반복한다.

while 조건:
  조건이 참일경우 실행
  조건이 거짓이 될 경우까지 계속해서 반복

예로 들어

>>> count = 0
>>> while count < 10:
...   print(count)
...   count += 1
...
0
1
2
3
4
5
6
7
8
9

컴프리헨션 (comprehension)

함축 또는 내포

일반적인 for문을 사용하는 때보다 훨씬 간편하다.

그러나 조건이 2개 이상이 되는 경우에는 일반적인 for문을 사용하는게 옳다.

리스트 컴프리헨션

[표현식 for 항목 in iterable객체]
  • [1,2,3,4,5]를 만드는 방법
# 리스트 컴프리헨션을 사용한 경우
[i for i in range(1, 6)]

# range와 for문을 사용한 경우
for i in range(1, 6):
  print(i)
  • 만약 각 i에 2배의 값을 할당하고 싶다면?
[i*2 for i in range(1,6)]
  • 만약 1~5중 짝수만 해당하는 리스트를 만들고 싶다면?
[i for i in range(1,6) if i % 2==0]

리스트 컴프리헨션의 중첩

for color in colors:
  for fruit in fruits:

[(color, fruit) for color in colors for fruit in fruits]

셋 컴프리헨션

{표현식 for 표현식 in iterable객체}

실습

1.for문을 2개 중첩하여 (0,0), (0,1), (0,2), (0,3), (1,0), (1,1)….. (6,3)까지 출력되는 반복문을 구현한다.

for i in range(0,8):
  for j in range(0,4):
    print((i,j))

2.리스트 컴프리헨션을 중첩하여 위 결과를 갖는 리스트를 생성한다

[(i,j) for i in range(0,7) for j in range(0,4)]

3.1, 2번의 반복문에서 1번은 튜플의 첫 번째 항목이 짝수일때만 출력하도록, 2번은 첫 번째 항목이 짝수일때만 리스트의 원소로 추가한다.

for i in range(0,8):
  for j in range(0,4):
    if i % 2 == 0:
      print((i,j))

[(i,j) for i in range(0,7) for j in range(0,4) if i % 2 ==0]

4.1000에서 2000까지의 숫자 중, 홀수의 합을 구해본다.

result = 0
for i in range(1001, 2001, 2):
    result += i

print(result)

5.리스트 컴프리헨션을 사용하여 구구단 결과를 갖는 리스트를 만들고, 해당 리스트를 for문을 사용해 구구단 형태로 나오도록 출력해본다. 각 단마다 한 번 더 줄바꿈을 넣어준다.

[(i*j) for i in range(1, 10) for j in range(1, 10)]

for i in range(1, 10):
  for j in range(1, 10):
    print(i*j)

6.1에서 99까지의 정수 중, 7의 배수이거나 9의 배수인 정수인 리스트를 생성한다. 단, 7의 배수이며 9의 배수인 수는 한 번만 추가되어야 한다.

result = []
for i in range(1, 100):
    if i % 7 == 0 or i % 9 == 0:
        result.append(i)
[i for i in range(1, 100) if i % 7 == 0 or i % 9 ==0]