Python study 3 - 조건문, 반복문, 리스트관련 함수
Python 조건문, 반복문, 리스트 관련 함수에 대해 학습합니다.
Python에서 사용되는 개념의 일부 혹은 전체를 정리하여 반복학습에 사용합니다.
- 조건문에 대해 학습합니다.
- 반복문과 관련된 리스트, for 반복문과 while 반복문에 대해 학습합니다.
- 리스트, 딕셔너리와 관련된 함수를 학습합니다.
조건문
조건문에 응용할 Python 날짜/시간 구하는 방법
1
2
3
4
5
6
# 날짜/시간 구하는 방법
import datetime
import pytz # 미설치시 shell에서 설치
seoul = pytz.timezone("Asia/Seoul")
now = datetime.datetime.now(seoul)
- if문 이용 상기 소스로 오전/오후 구분하는 프로그램 생성
1
2
3
4
5
6
print(f"{now.hour}시입니다!")
if now.hour < 12:
print("오전입니다!")
else:
print("오후입니다!")
- IndentationError : Python에서 들여쓰기를 잘못사용할 경우 해당 에러가 발생하여 들여쓰기가 잘못된곳을 찾아야합니다.
- 예시1
1 2 3 4 5 6
print("A") if False: print("B") print("C") print("Error") # 들여쓰기 잘못된곳 print("D")
- 예시2
1 2 3 4 5
print("A") if False: print("B") print("C") print("Error") # 들여쓰기 잘못된곳
- bool() 자료형 변환 활용
- None, 숫자 0(0.0), 빈 컨테이너, 빈 문자열을
bool()
자료형 변환시False
를 반환합니다. - 그 외
bool()
변환시True
를 반환합니다. - 예시
1 2 3
name = "홍길동" if name: print(f"{name}")
여기서
name
에bool()
자료형이True
값을 반환하므로"홍길동"
이 출력됩니다.
- None, 숫자 0(0.0), 빈 컨테이너, 빈 문자열을
- raise와 pass
- raise NotImplNotImplementedError : 작성한 코드줄에 오류를 생성. 향후 코드를 작성하기위해 임시로 코드입력시 사용
- pass : 특정 코드를 아무것도 입력안했을시, 에러방지용으로 넘어가는 코드처리
반복문
리스트와 배열
- 배열 : 길이가 고정된 형태
- 리스트 : 배열에 요소를 추가/제거 등의 기능을 추가한 것
- 리스트 길이 : len() 함수 사용
- 리스트 거꾸로 뒤집기 : 문자열[숫자A:숫자B:스탭] 형태이용하여
[::-1]
뒤집기 스탭사용 - 리스트는 중첩이 가능합니다.
1 2 3 4
num1 = [1, 3] num2 = [num1, num1] # 2차원 리스트 print(num2) print(num2[0][1])
출력값 :
[[1,3], [1,3]]
3
리스트의 함수
- 요소 추가(파괴적 연산) : append(), insert(), extend()
- append(요소) : 가장 마지막에 요소를 추가하는 함수
- insert(index, 요소) : 원하는 위치에 요소를 하나 추가 a.append(10) == a.insert(-1, 10)
- extend([요소, 요소, 요소]) : 가장 마지막에 요소를 여러개 추가 a.extend([5, 6]) == a += [5, 6]
- 요소 제거(파괴적 연산) : del, pop(), remove(), clear()
- del a[index] : 선택한 인덱스 제거
- pop(index) : 선택한 인덱스 제거(미입력시 -1)
- remove(요소) : 입력한 요소 제거
- clear() : 모든 요소 제거
- 요소 정렬(파괴적 연산) : sort()
- sort() : 오름차순으로 출력
- sort(reverse=True) : 내림차순으로 출력
- 요소 확인(비파괴적 연산) : in, not in
- A in B :
A
가B
에 있는지 True/False 반환 - A not in B :
A
가B
에 없는지 True/False 반환
- A in B :
for 반복문
- for 반복문 형식
for 반복변수 in 리스트:
복합구문 - for 반복문 예시 : 총합과 총곱 계산
1 2 3 4 5 6 7 8 9
num = [1, 3, 5] sum = 0 prod = 1 for i in num: sum += i prod *= i print(sum) print(prod)
중첩반복분
1
2
3
4
5
6
num = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for i in num:
print(i)
for j in i: # 중첩 반복문
print(j)
출력값
[1, 2, 3]1
2
3
[4, 5, 6]
4
5
6
[7, 8, 9]
7
8
9
전개연산자
- 리스트앞에
*
를 붙여서 해당리스트 목록을 가져올 수 있습니다. 리스트 요소를 복사하고 싶을때 주로 사용합니다.
1
2
3
4
5
num = [1, 2, 3]
num_new = [*num, num, 4]
print(num_new)
print(num_new[0])
출력값
[1, 2, 3, [1, 2, 3], 4]1
- 전개연산자를 매개변수를 풀어서 출력할 수 있습니다.
1
2
3
watch = [14, 22, 34]
print("{}시 {}분 {}초".format(watch[0], watch[1], watch[2]))
위 아래 코드는 동일한 값을 출력합니다.
1
2
3
watch = [14, 22, 34]
print("{}시 {}분 {}초".format(*watch))
딕셔너리
- 생성 : a = {키:값}
{키:값}
→ “이름”:”홍길동”, “나이”:00, “사는곳”:”서울”
a[“이름”] = “홍길동”
a[“나이”] = 00
a[“사는곳”] = “서울”- 키 : 숫자, 문자열, 불, 튜플 입력가능
- 값 : 모두 입력가능
- for 반복문에서 사용
1 2 3 4 5 6 7 8 9 10
a = { "이름" : "홍길동", "나이" : 90, "사는곳" : "서울" } for key in a: print(key) print(a[key]) print("ㅡ" * 10)
출력값
이름홍길동
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
나이
90
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
사는곳
서울
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
```python
a = [{
"이름" : "홍길동",
"나이" : 90,
"사는곳" : "서울"
}, {
"이름" : "홍길순",
"나이" : 40,
"사는곳" : "제주"
}]
for i in a:
for key in i:
print(key)
print(i[key])
print("ㅡ" * 10)
```
출력값
이름홍길동
나이
90
사는곳
서울
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이름
홍길순
나이
40
사는곳
제주
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
- 딕셔너리 요소 추가/수정/제거
- 딕셔너리 예시 test1 = {“이름” : “홍길동”, “나이” : 40}
- 요소의 값 변경 : test1[“이름”] = “홍길순”
- 요소 추가 : test1[“사는곳”] = “서울”
- 요소 제거 :
del
test1[“사는곳”] - 키의 존재 유무 확인 방법 :
in 사용
“성별” in test1 → True/False 반환 - get() 함수 : test1.get(key) 형식이며, 키가 존재하지않는경우
None
반환
test1.get(“이름”) → “홍길동”
범위
특정한 범위 내부의 정수들을 나열하는 자료형으로서,
range()
함수를 사용합니다.
range()함수는 인덱싱 문자열[]과 슬라이싱 문자열[:], [::] 기능과 비슷하게 작동합니다.
- range(숫자A) :
0
부터숫자A-1
까지의 정수를 범위로 나열 - range(숫자A, 숫자B) :
숫자A
부터숫자B-1
까지의 정수를 범위로 나열 - range(숫자A, 숫자B, 숫자C) :
숫자A
부터숫자B-1
까지의 정수를숫자C
만큼씩 스탭하면서 나열 - 예시
1 2 3
print(list(range(10))) print(list(range(2, 10))) print(list(range(2, 10, 3)))
출력값
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][2, 3, 4, 5, 6, 7, 8, 9]
[2, 5, 8]
reversed()함수
reversed()함수는 반복 가능한 매개변수를 넣으면 뒤집은 결과를 리턴해줍니다.
리턴해주는 자료형은이터레이터
라는 특수 자료형입니다.
예시) list(reversed([1, 2, 3])) → [3, 2, 1]
- reversed()함수 활용
- range() 범위 함수 :
list(reversed(0, 5))
- 반복문 뒤집기 :
for i reversed(range(0, 5)):
- range() 범위 함수 :
while 반복문
while 반복문은 조건이 참이라면 무한 반복하는 형태입니다.
파이썬에서는 while 반복문이 for 반복문보다 범용성이 좋습니다.
for 반복문에서 구현한 코드를 while 반복문으로 구현할 수 있지만,
반대의 경우 코드구성이 난해하거나 불가할 수 있습니다.
- 시간 기반 예시 : 현재시간이 시작시간 + 5초 보다 커지면 멈추는 반복문
1
2
3
4
5
6
7
8
import time
start_time = time.time()
current_time = time.time()
while current_time < start_time + 5:
print(current_time, start_time + 5)
current_time = time.time()
- break와 continue 키워드
break
키워드는 반복문 전체를 벗어날 때 사용하는 구문입니다.
1 2 3 4 5 6 7 8
i = 0 while True: print(f"{i}번째 반복입니다.") i += 1 test = input("종료 하시겠습니까?(y/n): ") if test in ["y", "Y"]: break
continue
키워드는 현재 반복을 넘어갈 때 사용하는 구문입니다.
1 2 3 4 5 6
# 5이상의 숫자만 출력 numbers = [1, 3, 5, 7 ,9] for i in numbers: if i < 5: continue print(i)
리스트와 딕셔너리 관련 함수
리스트에 적용할 수 있는 기본 함수 : min(), max(), sum()
1 2 3 4 5 6 7 8 9 10 11
numbers = [1, 5, 10, 15, 20] print(max(numbers)) print(min(numbers)) print(sum(numbers)) # numbers 리스트에 숫자가 아닌 요소가 있다면 오류발생 # print(max(1, 5, 10, 15, 20)) print(max(*numbers)) # print(min(1, 5, 10, 15, 20)) print(min(*numbers)) # sum 함수는 가변인자를 받지 않기 때문에 *numbers 불가
출력값
20
1
51
20
1
- 리스트 뒤집는 함수 : reversed()
reversed() 함수는 동일한 할당을 할경우 제일 처음만 실행되며, 이후 할당된 것은 무시됩니다.
1 2 3 4
numbers = [1, 3, 5, 7, 9] for number in reversed(numbers): print(number)
출력값
9
7
5
3
1
- 현재 인덱스 위치를 확인하는 함수 : enumerate()
enumerate() 함수도 하나의 할당만 실행되며, 이후 할당된 것은 무시됩니다.
1 2 3 4
dogs = ["푸들", "말티즈", "웰키코기"] for dog in enumerate(dogs): print(dog[0], dog[1])
출력값
0 푸들
1 말티즈
2 웰키코기
딕셔너리로 반복문 활용함수 : items(), keys(), values()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
dog = { "종류": "푸들", "나이": 2, "사는곳": "한국" } print(dog.items()) for info in dog.items(): print(info[0], info[1]) print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ") print(dog.keys()) for info in dog.keys(): print(info) print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ") print(dog.values()) for info in dog.values(): print(info) print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ")
출력값
dict_items([('종류', '푸들'), ('나이', 2), ('사는곳', '한국')])
종류 푸들
나이 2
사는곳 한국
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
dict_keys(['종류', '나이', '사는곳'])
종류
나이
사는곳
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
dict_values(['푸들', 2, '한국'])
푸들
2
한국
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
- 리스트 내포(List comprehension) : 반복가능한 것을 새로운 리스트로 만들어내는 문법
[표현식 for 반복문]
형태
1 2 3 4 5 6 7 8 9 10 11 12
# An = 2n + 1 (0 <= n < 10) # A = {1, 3, 5, 7, 9, ..., 19} A = [] for i in range(0, 10): # 반복문 A.append(2 * i + 1) # 표현식 2 * i + 1 print(A) print("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ") # 리스트 내포 식 # [표현식 for 반복문] B = [2 * i + 1 for i in range(0, 10)] print(B)
출력값
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
- 리스트 내포와 조건 :
[표현식 for 반복문 조건문]
형태
1 2 3 4 5 6 7 8
# 리스트 내포 식 # [표현식 for 반복문] C = [ 2 * i + 1 # 표현식 for i in range(0, 10) # 반복문 if i % 2 == 0 # 조건문 ] print(C)
출력값
[1, 5, 9, 13, 17] - join() 함수 :
"".join([list])
리스트에 있는 문자열들을 앞에있는 문자열로 연결해주는 함수1 2 3 4 5
print("\n".join([ f"join() 함수를 통해", f"깔끔한 코드와", f"줄바꿈을 할 수 있어요." ]))
출력값
join() 함수를 통해
깔끔한 코드와
줄바꿈을 할 수 있어요.