for 변수명 in Collection_Data: 각각의 데이터 원소로 반복 실행할 명령 .... else: 데이터가 더이상 없을때 마지막에 실행할 명령 ....
for loop with list
for num in [0, 3, 4, 9]: print(num)출력 : 0 출력 : 3 출력 : 4 출력 : 9for문에서의 else 사용
for num in [0, 3, 4, 9]: print(num) else: print("더이상 데이터가 없습니다")출력 : 0 출력 : 3 출력 : 4 출력 : 9 출력 : 더이상 데이터가 없습니다
for loop with tuple
for day in ("월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"): print(f"{day} 입니다") # 바꿀 수 없는 불변 객체출력 : 월요일 입니다 출력 : 화요일 입니다 출력 : 수요일 입니다 출력 : 목요일 입니다 출력 : 금요일 입니다 출력 : 토요일 입니다 출력 : 일요일 입니다
for loop with set
순서가 바뀌고 중복된 데이터가 삭제되는 것에 주의해야 한다.s = {5, 4, 1, 6, 9, 4, 9, 0} # 집합 선언의 중복 된 수가 다 사라지고. 순서가 다르다. print(s) for data in s: #다른 순서가 달라짐 print(data)출력 : {0, 1, 4, 5, 6, 9} 출력 : 0 출력 : 1 출력 : 4 출력 : 5 출력 : 6 출력 : 9
for loop with dict
단순 loop에서는 key 값만 리턴된다.dict1 = {"a":"apple", "b":"body", "c":"cat"} for key in dict1: print(key, dict1[key])출력 : a apple 출력 : b body 출력 : c cat** dict.items()를 사용하여 key, value값 사용
dict1 = {"a":"apple", "b":"body", "c":"cat"} for key, value in dict1.items(): print(key, value)출력 : a apple 출력 : b body 출력 : c cat
range([start,] stop[,step])
range의 인덱스 : step > 0 경우 +---+---+---+---+---+---+---+---+---+---+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +---+---+---+---+---+---+---+---+---+---+ 0 1 2 3 4 5 6 7 8 9 100, 1, 2, 3, 4, 5, 6 데이터 만들기
for n in range(7): print(n)출력 : 0 출력 : 1 출력 : 2 출력 : 3 출력 : 4 출력 : 5 출력 : 6range()는 객체를 리턴한다
print(range(7))출력 : range(0, 7)list로 변환하면 원소를 볼 수 있다
print(list(range(7)))출력 : [0, 1, 2, 3, 4, 5, 6]시작 값과 끝 값
data1 = range(2,7) print(list(data1))출력 : [2, 3, 4, 5, 6]step 값 주기
data2 = range(0, 10, 2) print(list(data2))출력 : [0, 2, 4, 5, 6, 8]
range의 인덱스: step이 < 0 (역순) 인경우+---+---+---+---+---+---+---+---+---+---+ | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | +---+---+---+---+---+---+---+---+---+---+ 9 8 7 6 5 4 3 2 1 0 -1
data1 = range(5, 0) print(list(data1)) # 뭐가 문제지 ???출력 : []data1 = range(5, 0, -1) print(list(data1)) # 뭐가 문제지 ???출력 : [5, 4, 3, 2, 1]5, 4, 3, 2, 1, 0이 되게 하려면?
data2 = range(5, -1, -1) print(list(data2))출력 : [5, 4, 3, 2, 1, 0]
data1 = enumerate([1, 2, 3]) for i, value in data1: print(i, ":", value) print()출력 - 0 : 1 출력 - 1 : 2 출력 - 2 : 3data2 = enumerate({1, 2, 3}) for i, value in data2: print(i, ":", value) print()출력 - 0 : 1 출력 - 1 : 2 출력 - 2 : 3사전의 경우 인덱스와 키 값을 리턴한다
dict1 = {'이름': '홍길동', '나이': 24} data = enumerate(dict1) for i, key in data: print(i, ":", key, dict1[key]) print()출력 - 0 : 이름 홍길동 출력 - 1 : 나이 24
1 x 1 = 1 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 ----------구구단 출력하기
range(s, e)for i in range(1, 10): for j in range(1, 10): print(f"{i} x {j} = {i*j}") print("----------")
continue 예시
짝수 일때는 스킵한다for i in range(10): if i % 2 == 0: continue print(i)출력 : 1 출력 : 3 출력 : 5 출력 : 7 출력 : 9break 예시
처리하면서 단어가 "end"이면 끝낸다for data in ["one", "two", "three", "skip", "four", "end", "five"]: if data == "end": break #end일 때 끝내라 print(data)출력 : one 출력 : two 출력 : three 출력 : skip 출력 : four
for data in range(100,-1,-1): if data % 17 == 0: print(f"{data}는 17의 배수입니다.") break else: # else의 라인따라 출력이 달라진다 print("for loop 종료")출력 : 85는 17의 배수 입니다.
for data in range(10): continue print(data) else: print("for loop 종료 1")출력 : for loop 종료 1
for data in []: print(data) else: print("for loop 종료 2")출력 : for loop 종료 2
소수찾기
방법 1
for i in range(2, 101): # 스킵이 되서 2가 빠짐. for j in range(2, i): if i % j == 0: break elif j == i-1: print(i) # 뭐가 문제지 ???출력 : 3 출력 : 5 출력 : 7 출력 : 11 출력 : 13 출력 : 17 출력 : 19 출력 : 23 출력 : 29 출력 : 31 출력 : 37 출력 : 41 출력 : 43 출력 : 47 출력 : 53 출력 : 59 출력 : 61 출력 : 67 출력 : 71 출력 : 73 출력 : 79 출력 : 83 출력 : 89 출력 : 97방법 1 수정
for i in range(2, 101): for j in range(2, i+1): # 2부터 시작으로 +1 씩 증가로 소수 도출 if j == i: print(i) elif i % j == 0: break출력 : 2 출력 : 3 출력 : 5 출력 : 7 출력 : 11 출력 : 13 출력 : 17 출력 : 19 출력 : 23 출력 : 29 출력 : 31 출력 : 37 출력 : 41 출력 : 43 출력 : 47 출력 : 53 출력 : 59 출력 : 61 출력 : 67 출력 : 71 출력 : 73 출력 : 79 출력 : 83 출력 : 89 출력 : 97방법 2
for i in range(2, 101): is_prime = True for j in range(2, i): if i % j == 0: is_prime = False break if is_prime: print(i)출력 : 2 출력 : 3 출력 : 5 출력 : 7 출력 : 11 출력 : 13 출력 : 17 출력 : 19 출력 : 23 출력 : 29 출력 : 31 출력 : 37 출력 : 41 출력 : 43 출력 : 47 출력 : 53 출력 : 59 출력 : 61 출력 : 67 출력 : 71 출력 : 73 출력 : 79 출력 : 83 출력 : 89 출력 : 97방법 3
for i in range(2, 101): for j in range(2, i): if i % j == 0: break else: print(i)출력 : 2 출력 : 3 출력 : 5 출력 : 7 출력 : 11 출력 : 13 출력 : 17 출력 : 19 출력 : 23 출력 : 29 출력 : 31 출력 : 37 출력 : 41 출력 : 43 출력 : 47 출력 : 53 출력 : 59 출력 : 61 출력 : 67 출력 : 71 출력 : 73 출력 : 79 출력 : 83 출력 : 89 출력 : 97좀 더 좋은 방법
이전 방법은 몇번이나 계산 되었나?count = 0 prime_count = 0 for i in range(2, 101): for j in range(2, i): count += 1 if i % j == 0: break else: prime_count += 1 # print(i) print("count:", count) print("prime_count:", prime_count) print("-"* 10)출력 - count : 1133 출력 - prime_count : 25계산 줄이는 방법
prime_numbers = [] count = 0 prime_count = 0 for i in range(2, 101): for j in prime_numbers: count += 1 if i % j == 0: break else: prime_count += 1 # print(i) prime_numbers.append(i) print("count:", count) print("prime_count:", prime_count) print("largest prime number:", prime_numbers[-1]) # 1000까지 계산, 10000까지 계산해보기출력 - count : 411 출력 - prime_count : 25 출력 - largest_count : 97
위의 로직을 더 좋게 고칠 수 있는 방법은?
list 원소 삭제로 인한 부작용
짝수 모두 지우려고 함data1 = [ 0, 1, 2, 4, 6, 7 ] for i in data1: print(i) # 1, 4는 스킵이 됨. 그래서 부작용 발생. if i % 2 == 0: data1.remove(i) print(data1) # 4는 왜 안지워 졌지??출력 : 0 출력 : 2 출력 : 6 출력 : [1, 4 ,7]list 원소 추라로 인한 부작용
data1 = [ 0, 1, 2, 3] for i in data1: print(i) if i == 2 and 4 not in data1: data1.insert(0, 4) print(data1) # 2가 두번 반복출력 : 0 출력 : 1 출력 : 2 출력 : 2 출력 : 3 출력 : [4, 0, 1, 2, 3]