Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ddim
- 프로그래머스
- diffusion models
- 포스코 채용
- controlNet
- posco 채용
- colorization
- Image Generation
- kt인적성
- manganinja
- stable diffusion
- KT
- DDPM
- classifier-free guidance
- 코딩테스트
- 포스코 코딩테스트
- Generative Models
- dp
- ip-adapter
- 과제형 코딩테스트
- 논문 리뷰
Archives
- Today
- Total
Paul's Grit
[Python] 반복문 & List comprehension 본문
반복문(loop)¶
- 반복되는 코드를 실행할 때 사용
- while, for, break, continue
- list comprehension
while¶
- 조건에 의한 반복문
In [2]:
data = 3
while data:
print(data)
data -= 1
print('반복문 종료')
3 2 1 반복문 종료
- break: 반복을 중단할 때 사용
In [6]:
count = 0
while True:
count += 1
print(count)
if count >= 5:
break
print('반복문 종료')
1 2 3 4 5 반복문 종료
In [12]:
# 짝수만 출력
count = 0
while True:
count += 1
if count % 2:
continue # 다음 루프를 진행
if count >= 10:
break
print(count)
print('반복문 종료')
2 4 6 8 반복문 종료
Quiz (1)¶
- while을 이용하여 'q' 문자열이 입력될 때 까지
- 내가 입력한 단어를 리스트 변수에 저장하는 코드를 작성
- input()을 이용
In [21]:
word = []
while 'q' not in word:
word.append(input('단어 입력:'))
print(word)
['Python', 'Jupyter', 'Notebook', 'Linux', 'q']
Quiz (2)¶
- 1부터 100까지 정수를 출력해주세요
- 3의 배수만 출력해주세요
In [38]:
num = 1
result = []
while num:
if num % 3 == 0:
result.append(num)
if num > 100:
break
num += 1
print(*result)
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99
Quiz (3)¶
- 랜덤한 숫자 6개 출력
- 조건:
- 중복되는 숫자 없이, 6개 랜덤한 숫자
- 1~45 중에 선택이 되어야 한다.
- 오름차순 정렬
- while문 이용
- 예) [1, 2, 3, 34, 40, 45]
In [84]:
import random
num_list = []
while len(num_list) != 6:
a = random.randint(1, 45)
if a not in num_list:
num_list.append(a)
num_list.sort()
print('숫자:', *num_list)
숫자: 7 13 15 16 39 44
Quiz (4)¶
- 학생이 있습니다.
- 총점과 평균점수, 최저점수를 출력
- 예) 총 점수는 190.0점입니다. 평균점수는 50.0점 입니다. 최저점수는 20.0점입니다.
- input() 사용
- while문 사용
In [115]:
subject_list = ['파이썬', '머신러닝', 'ROS']
subject = 0
total_score = 0
min_score = 1000
while subject != 3:
score = int(input('- {} 점수를 입력하세요:'.format(subject_list[subject])))
total_score += score
if score < min_score:
min_score = score
subject += 1
avg_score = total_score / subject
print(f'총 점수는 {total_score:.1f}점입니다. 평균점수는 {avg_score:.1f}점 입니다. 최저점수는 {min_score:.1f}점입니다.')
총 점수는 190.0점입니다. 평균점수는 63.3점 입니다. 최저점수는 20.0점입니다.
2. for¶
- 횟수에 의한 반복문
- iterable한 값을 하나씩 꺼내서 value에 대입 시킵니다
- 코드를 iterable한 개수 만큼 실행
- iterable: 순서가 있는 데이터: list, tuple, dict
In [117]:
li = [0, 1, 2, 3, 4]
for i in li:
print(i)
0 1 2 3 4
range()¶
- 정수의 리스트를 생성하는 함수
In [131]:
ls = list(range(100)) # 리스트에 1부터 100까지의 숫자를 담아주세요
print(ls)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
In [132]:
list(range(5, 10)) # start, end point
Out[132]:
[5, 6, 7, 8, 9]
In [133]:
list(range(5, 10, 2)) # stride 사용 가능
Out[133]:
[5, 7, 9]
In [135]:
result = 0
for value in range(100):
result += value
print(result)
4950
enumerate¶
- 순서가 있는(iterable) 자료형(list, tuple, dict)을 입력으로 받는다
- 각 요소의 인덱스를 함께 반환한다
In [138]:
ls = ['first', 'second', 'third']
for index, data in enumerate(ls):
print(index, data)
0 first 1 second 2 third
In [140]:
# dictionary 데이터 타입과 for문
points_dict = {'python': 80, 'ml':90, 'ros': 20}
for point in points_dict:
print(point, end = '\t') # dict의 key 값만 출력된다
python ml ros
In [144]:
points_dict.items()
Out[144]:
dict_items([('python', 80), ('ml', 90), ('ros', 20)])
In [145]:
for k, v in points_dict.items():
print(k, v)
python 80 ml 90 ros 20
Quiz (1)¶
- 정수를 입력받아 아래의 조건대로 출력하세요
- 3의 배수이면 'fizz'
- 5의 배수이면 'buzz'
- 15의 배수이면 'fizzbuzz' -> 대문자로 출력
In [179]:
a = int(input('숫자를 입력하세요: '))
if a % 15 == 0:
print('fizzbuzz'.upper()) # upper(): 대문자 문자열로 변환 x lower(): 소문자 문자열로 변환
elif a % 3 == 0:
print('fizz')
elif a % 5 == 0:
print('buzz')
FIZZBUZZ
이중 for문¶
In [184]:
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print(matrix)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
In [189]:
for row in matrix:
for element in row:
print(element, end = ' ')
print()
1 2 3 4 5 6 7 8 9
In [194]:
# 구구단
for num1 in range(1, 10):
for num2 in range(2, 10):
print(f'{num1} x {num2} = {num1 * num2}', end = '\t')
print()
1 x 2 = 2 1 x 3 = 3 1 x 4 = 4 1 x 5 = 5 1 x 6 = 6 1 x 7 = 7 1 x 8 = 8 1 x 9 = 9 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 3 x 6 = 18 3 x 7 = 21 3 x 8 = 24 3 x 9 = 27 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20 4 x 6 = 24 4 x 7 = 28 4 x 8 = 32 4 x 9 = 36 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36 6 x 7 = 42 6 x 8 = 48 6 x 9 = 54 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64 8 x 9 = 72 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81
In [218]:
# 사용하지 않지만, 선언이 되어야 하는 변수명은 _로 사용
# 식별자가 중복되지 않도록 하기 위해서
ls = [1, 2, 3]
for _ in ls:
print('python')
python python python
3. list comprehension¶
- 리스트 데이터를 만드는 문법
- 주의: 과도한 list comprehension 사용은 가독성을 저해!!!
In [367]:
ls = [1, 3, 6, 9, 12, 15, 18]
result = []
for value in ls:
result.append(value ** 2)
print(result)
# 위의 코드를 한줄로 작성
result = [value ** 2 for value in ls]
print(result)
[1, 9, 36, 81, 144, 225, 324] [1, 9, 36, 81, 144, 225, 324]
List comprehension이 속도가 더 빠르다¶
In [364]:
%%time
result = []
for value in ls:
result.append(value ** 2)
print(result)
[1, 9, 36, 81, 144, 225, 324] CPU times: user 41 µs, sys: 11 µs, total: 52 µs Wall time: 54.6 µs
In [362]:
%%time
result = [value ** 2 for value in ls]
print(result)
[1, 9, 36, 81, 144, 225, 324] CPU times: user 45 µs, sys: 0 ns, total: 45 µs Wall time: 41 µs
- words = ['apple', 'banna', 'orange', 'grape', 'kiwi']
- list comprehension으로
- 문자열 길이가 5 이상인 값만 result에 저장하세요
In [368]:
words = ['apple', 'banna', 'orange', 'grape', 'kiwi']
result = [word for word in words if len(word) >= 5]
print(result)
['apple', 'banna', 'orange', 'grape']
- datas = [1, 2, 'apple', 3.14, 'banana', 5, 6.3, [1, 2, 3], {'name':'car'}]
- datas에서 정수 데이터만을 뽑아서 저장해주세요
- isinstance(1, int) 사용
In [369]:
datas = [1, 2, 'apple', 3.14, 'banana', 5, 6.3, [1, 2, 3], {'name':'car'}]
result = [data for data in datas if isinstance(data, int)]
print(result)
[1, 2, 5]
In [375]:
# 3 x 3 행렬
import numpy as np
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
# 전치행렬
mat = np.array(matrix)
print('전치행렬')
print(mat.T)
전치행렬 [[1 4 7] [2 5 8] [3 6 9]]
- 이중 for문으로 전치행렬 만들기
In [377]:
transposed = []
for i in list(range(len(matrix))):
colums = []
for row in matrix:
colums.append(row[i])
transposed.append(colums)
print(transposed)
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
- list comprehension으로 전치행렬 만들기
In [378]:
comp_transposed = [[row[i] for row in matrix] for i in list(range(len(matrix)))]
print(comp_transposed)
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Quiz(list comprehension)¶
- datas = ['kim test', 'cho python', 'min data', 'Kim jupyter', 'jung notebook', 'KIM vscode']
- kim씨 성을 가진 사람을 제외한 나머지 사람의 이름만 리스트로 출력
- 출력: ['python', 'data', 'notebook']
In [380]:
datas = ['kim test', 'cho python', 'min data', 'Kim jupyter', 'jung notebook', 'KIM vscode']
In [381]:
non_kims = []
for data in datas:
if data.split()[0].lower() != 'kim':
non_kims.append(data.split(' ')[1])
print(non_kims)
['python', 'data', 'notebook']
In [382]:
non_kims = [data.split()[1] for data in datas if data.split()[0].lower() != 'kim']
print(non_kims)
['python', 'data', 'notebook']
Quiz(list comprehension) (2)¶
- kim씨 성을 가진 사람을 제외한 나머지 사람 출력
- 단 cho씨 성을 가진 사람만 성을 제외한 이름만 출력
- 출력: ['python', 'min data', 'jung notebook']
In [383]:
non_kims_2 = []
for data in datas:
if data.split()[0].lower() != 'kim':
if data.split()[0] == 'cho':
non_kims_2.append(data.split()[1])
else:
non_kims_2.append(data)
print(non_kims_2)
['python', 'min data', 'jung notebook']
In [384]:
non_kims_2 = [data.split()[1] if data.split()[0] == 'cho' else data for data in datas
if data.split()[0].lower() != 'kim']
print(non_kims_2)
['python', 'min data', 'jung notebook']
Quiz(list comprehension) (3)¶
- kim씨 성을 가진 사람을 제외한 나머지 사람 출력
- 이름이 'python' 또는 'data'인 사람 출력
- 단 cho씨 성을 가진 사람만 성을 제외한 이름만 출력
- 출력: ['python', 'min data']
In [385]:
non_kims_3 = []
for data in datas:
if data.split()[0].lower() != 'kim':
if data.split()[1] in ['python', 'data']:
if data.split()[0] == 'cho':
non_kims_3.append(data.split()[1])
else:
non_kims_3.append(data)
print(non_kims_3)
['python', 'min data']
In [386]:
non_kims_3 = [data.split()[1] if data.split()[0] == 'cho' else data for data in datas
if data.split()[0].lower() != 'kim' if data.split()[1] in ['python', 'data']]
print(non_kims_3)
['python', 'min data']
'Data Analysis > Python' 카테고리의 다른 글
[Python] Stack / Queue 구현 (0) | 2024.03.28 |
---|---|
[Python] 조건문 & 문자열 포매팅 (0) | 2023.08.03 |
[Python] PEP8 - Style Guide for Python Code 에 대하여 (2) | 2023.08.02 |
[Python] 파이썬 문법 기초 (1) | 2023.08.02 |