본문 바로가기
Python/Basic

[파이썬, Python] 제어문 - 2️⃣ 반복문(2)_다중반복문, 컴프리헨션(Comprehension)

by coding-choonsik 2023. 3. 8.
728x90
반응형
SMALL

1. 다중반복문

  • 반복문이 2가지 이상 겹쳐져 있는 형태
for i in range(1, 4):  # 증가값 1
  print(f'🥙 1:{i}')

for j in range(1, 4): 
  print(f'   🥗 1:{j}')
  
>>> 
🥙 1:1
🥙 1:2
🥙 1:3
   🥗 1:1
   🥗 1:2
   🥗 1:3
   
   
# 블록처리
for i in range(1, 4):  # 증가값 1
  print(f'🥙 1:{i}')

  for j in range(1, 4):  # 증가값 1
    print(f'   🥗 1:{j}')

>>> 
🥙 1:1
   🥗 1:1
   🥗 1:2
   🥗 1:3
🥙 1:2
   🥗 1:1
   🥗 1:2
   🥗 1:3
🥙 1:3
   🥗 1:1
   🥗 1:2
   🥗 1:3

📌문제

  • '🌷'를 이용하여 아래와 같은 도형을 만들어보자.

1)

🌷 🌷 🌷 🌷 🌷

🌷 🌷 🌷 🌷 🌷
🌷 🌷 🌷 🌷 🌷
🌷 🌷 🌷 🌷 🌷
🌷 🌷 🌷 🌷 🌷
for i in range(5):
  for j in range(5):
    print('🌷', end=' ')
  print()  # enter키의 기능
  
>>> 
🌷 🌷 🌷 🌷 🌷 
🌷 🌷 🌷 🌷 🌷 
🌷 🌷 🌷 🌷 🌷 
🌷 🌷 🌷 🌷 🌷 
🌷 🌷 🌷 🌷 🌷

2)

🌷 🌷 🌷 🌷 🌷
🌷 🌷 🌷 🌷 
🌷 🌷 🌷
🌷 🌷 
🌷 
 
# 첫번째 방법
for i in range(5):
  for j in range(i, 5):  # i 값은 1씩 증가
    print('🌷', end=' ')
  print()
  
>>> 
🌷 🌷 🌷 🌷 🌷 
🌷 🌷 🌷 🌷 
🌷 🌷 🌷 
🌷 🌷 
🌷


# 두번째 방법
for i in range(5):
  for j in range(5-i):
    print('🌷', end=' ')
  print()

>>> 
🌷 🌷 🌷 🌷 🌷 
🌷 🌷 🌷 🌷 
🌷 🌷 🌷 
🌷 🌷 
🌷

 
3)

🌷
🌷 🌷
🌷 🌷 🌷
🌷 🌷 🌷 🌷
🌷 🌷 🌷 🌷 🌷

for i in range(5):
  for j in range(0, i+1):
    print('🌷', end=' ')
  print()
  
>>> 
🌷 
🌷 🌷 
🌷 🌷 🌷 
🌷 🌷 🌷 🌷 
🌷 🌷 🌷 🌷 🌷
 

📌문제

  •  2단부터 9단까지의 구구단을 출력하는 프로그램을 작성하여보자.

1) for in 문

 

for i in range(2, 10):
  print('{}단'.format(i))
  for j in range(1, 10):
    print('{} * {} = {}'.format(i, j, i*j))
  print()
  
>>> 
2단
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

3단
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

4단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

6단
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

7단
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63

8단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

9단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

2) while문

# 첫번째 방법
i = 1

while i < 9:
  i += 1
  j =1
  print('{}단'.format(i))
  while j < 10:
    print('{} * {} = {}'.format(i, j, i*j))
    j += 1
  print()
  
# 두번째 방법
i = 2
j = 1
while i <= 9:
  print(f'{i}단')
  
  while j <= 9:
    print(f'{i} * {j} = {i*j}')
    j += 1
  i += 1
  j = 1    # j가 9까지 돌고 끝나버리기 때문에 초기화 해주어야 함.
  print()
  
>>>
2단
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

3단
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

4단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

6단
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

7단
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63

8단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

9단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

📌문제

  • 아래 score 리스트의 요소를 모두 출력하는 프로그램을 작성해보자.
  • score = [[80, 90, 50], [40, 70, 30], [90, 50, 100]]
score = [[80, 90, 50], [40, 70, 30], [90, 50, 100]]

for i in score:
  for j in i:
    print(j, end=' ')

>>> 80 90 50 40 70 30 90 50 100

2. 컴프리헨션(Comprehension)

  • 이터러블한 오브젝트를 생성하기 위한 방법 중 하나로 파이썬에서 사용할 수 있는 유용한 기능
# 0~9 까지 10번 반복하면서 0을 채워 리스트로 반환(iterable한 객체로 반환)

result = [0 for i in range(10)]     
print(result)

>>> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

# 0~9까지의 수를 반복하여 리스트에 담아줌
result = [i for i in range(n)]    
print(result)

>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# arr의 데이터만큼 반복하여 n을 저장한 list를 반환
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]   #iterable

result = [n for n in arr]
print(result)

>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# arr의 데이터만큼 반복하여 n*n을 저장한 list를 반환
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

result = [n*n for n in arr]
print(result)

>>> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 

  • 문자열의 길이를 반환하는 리스트를 만들어보자.
arr = ['apple','banana','orange','melon']

print([len(string) for string in arr])
>>> [5, 6, 6, 5]

 

  •  if 문을 사용하여 1 부터 10까지의 짝수를 리스트로 만들어보자.
result = [n for n in range(1, 11) if n % 2 == 0]

print(result)
>>> [2, 4, 6, 8, 10]
  • 0 부터100까지의 숫자 중 3의 배수이며, 홀수인 숫자만 리스트에 저장해보자.
# 첫번째 코드
res = [n for n in range(100) if n % 3 ==0 if n % 2 != 0]

print(res)
>>> [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99

# 두번째 코드
res = [n for n in range(100) if n % 3 == 0 and n % 2 != 0]

print(res)
>>> [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99

 

  • 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장해보자.
arr = [-1, 0, -4, 24, 5, -10, 2]

res = [n if n > 0 else 0 for n in arr] 
print(res)

>>> [0, 0, 0, 24, 5, 0, 2]

 

  • 컴프리헨션을 이용한 다중반복문을 작성해보자.
# 일반 다중반복문
arr = []

for i in range(1, 4):
  for j in range(1,3):
    arr.append(i * j)

print(arr)
>>> [1, 2, 2, 4, 3, 6]

# 컴프리헨션
# 저장되어야 할 데이터는 가장 맨 앞에 작성
res = [i*j for i in range(1,4) for j in range(1,3

print(arr)
>>> [1, 2, 2, 4, 3, 6]

 

  • 컴프리헨션을 이용하여 다차원의 리스트를 만들어보자.
res = [['🍑' for i in range(2)] for i in range(3)]

print(res)
>>> [['🍑', '🍑'], ['🍑', '🍑'], ['🍑', '🍑']]

 

728x90
반응형
LIST