for문
for 요소를 담을 변수 in 반복 가능한 객체:
반복할 코드(띄어쓰기 4칸)
for 변수 in range(횟수):
반복할 코드(띄어쓰기 4칸)
- Python에서의 for문 조금 특이한 구조
- JAVA의 일반적인 for문은 for(변수 선언; 조건식; 증감식){실행부}
- 변수의 숫자를 증감시키고, 산술적 변화에 따라 조건식에 부합할 때까지 반복하는 방식
- 오히려 Python의 for문은 자바의 향상된 for문과 유사
- for(자료형 변수명 : Iterable){실행부}
range
print(list(range(5,10)))
print(list(range(0,10,3)))
print(list(range(-10,-71, -30)))
# [5, 6, 7, 8, 9]
# [0, 3, 6, 9]
# [-10, -40, -70]
- range(시작숫자, 끝숫자, 증감)
- 시작숫자부터 끝숫자 - 1만큼의 리스트를 증감에 따라 반환
range 사용이 유리한 이유
- range는 메모리를 차지하지 않고 있다가, 명령이 주어졌을 때만 값을 반환
- 리스트와 조금 다름
- range 객체는 iterate할 때 원하는 시퀀스 항목들을 요소로 돌려주는 객체이지만,
메모리에 공간을 할당하여 미리 모든 요소들을 만들어 두는 것이 아니라 필요할 때
그때그때 다음 요소를 만들어 반환하기에 공간 효율적
for문 사용 예
- 파이썬의 for문은 시퀀스 자료형의 항목들을 순서대로 이터레이션합니다.(순서별로 요소를 하나씩 꺼냅니다.)
- 반복되는 부분을 만들때 활용하면 좋습니다.
- 혹은 iterable(객체를 루핑할 때 좋습니다.)
- 반복 횟수가 정해져있을 때 주로 사용합니다.
iterable : '반복가능한'이라는 사전적 의미
- 여러개의 요소들로 구성돼있으면서 요소를 한번에 하나씩 돌려줄 수 있는 객체
- list, str, tuple, range와 같은 시퀀스 자료형
- 비 시퀀스 자료형으로 dictionary
객체
- 메모리에 할당되어 존재하고 있는 데이터(추후 자세히 다룰 예정)
reversed()
- reversed(시퀀스) 함수는 반환값을 주지만 해당 시퀀스를 변경하지 않습니다.
- 리스트.reverse() 함수는 리스트 요소 순서를 뒤집어주며 반환 값이 없습니다.(None)
- 변수[::-1] 이 방식으로도 리스트를 뒤집을 수 있다.
for _ in reversed("일이삼사오육칠팔구십"): print(_, end = "")
while문
# Python
i = 0
while i < 100:
print("Hello world")
i += 1
# Java
자바 while
for(int ; i< 100; i++) {
System.out.println("Hello world");
break문
for, while문에서 break는 해당 반복문을 완전히 빠져나갑니다. 보통 반복문 안에서 특정 조건에 부합할 때 해당 반복문을 빠져나가기 위해 씁니다. 그래서 break는 if문과 함께 쓰이는게 보통입니다.
# 1000회 반복
for _ in range(1000):
print(_)
if _ == 100:
break
continue문
continue는 제어흐름을 유지하고, 반복문 안에서 특정조건에 부합할 때 해당 반복 회차만 빠져나가기 위해 씁니다. 그래서 continue문은 if 문과 함께 쓰이는게 보통입니다.
i = 0
while i < 100:
i += 1
if i % 2 == 0:
continue
# while 문으로 생각해볼 문제
i = 0
while True:
if i == 101:
break
if i % 10 != 3:
i += 1
continue
print(i , end = ' ')
i += 1
# continue문을 썼을 때는 구문 안쪽 i +=1 이 없었다면, i가 증가하지 않아서 무한루프에 빠짐
FizzBuzz 문제
for i in range(1,101):
if (i % 3 == 0) & (i % 5 == 0):
i = 'FizzBuzz'
elif (i % 3 == 0):
i = 'Fizz'
elif (i % 5 == 0):
i = 'Buzz'
print(i, end = '\t')
이 코드를 짧게 수정할 수 있다.
for i in range(1,101):
print("Fizz" * (i % 3 == 0) + "Buzz" * (i % 5 == 0) or i)
# 논리연산자에서 숫자 0, 빈문자열은 False로 취급한다.
'데이터 분석 및 시각화 > 파이썬' 카테고리의 다른 글
[Python] 기초 정리(tuple, random, set) (0) | 2023.01.11 |
---|---|
[Python] 메모리에 객체를 저장하는 구조 (0) | 2023.01.11 |
[Python] 기초 정리(dictionary, zip, list comprehension) (2) | 2023.01.10 |
[Python] 기초 정리(함수, 리스트 메서드, 리스트 Stack처럼 활용, unpakcing, map, if문 등) (1) | 2023.01.05 |
[Python] 기초 정리(지수표기법, 2진법, 개행문자, literal 등) (0) | 2023.01.05 |