혼공파 3주차! 열심히 공부하다 보니 벌써 3주차 게시물을 올릴 때가 되었네요ㅎㅎ
벌써 절반 공부했다니 뿌듯합니다. 😊😊
점점 많아지는 양이 걱정되긴 하지만... 완주까지 열심히 달려 보겠습니다! 👻
Chapter 04. 반복문
[기본 미션 : 리스트, 딕셔너리, 범위 자료형에 대해 이해한 내용을 바탕으로 포스팅하기]
[리스트]
✏️ 리스트 : 여러 가지 자료를 저장할 수 있는 자료
★ 이전 장에서 활용한 숫자,문자 등은 '개별적인 자료' 이며, 리스트는 이러한 자료들을 모아서 사용할 수 있게 해주는 '특별한 형태의 자료' 이다.
✏️ 리스트 생성 방법
✔️ 대괄호 [ ] 안에 자료를 쉼표 ( , ) 로 구분해서 입력하여 리스트를 생성한다. 대괄호 내부에 넣는 자료를 요소 (Element) 라고 한다. 리스트는 N개의 자료형으로 구성할 수 있다. (1개 ~ N개)
# 리스트 생성 방법 list = [요소, 요소, 요소, ... ] |
✏️ 리스트 인덱스
✔️ 리스트 안에 있는 요소를 각각 사용하려면 리스트 이름 바로 뒤에 대괄호 [ ] 를 입력하고, 그 안에 선택한 요소의 위치를 나타내는 숫자를 입력한다. 이 숫자를 인덱스(index) 라고 한다.
파이썬의 인덱스는 0부터 시작하기 때문에 각각의 요소는 다음과 같은 형태로 저장된다.
list_a = [1, 2, 3, 4, 5] |
✏️ 리스트 사용법
✔️ 리스트의 특정 요소를 변경할 수 있다.
리스트명[인덱스 번호] = "바꿀 값" |
list_a = [1,2,3]
# list_a의 첫번째 요소를 "change" 로 변경
list_a[0] = "change"
print(list_a) # ['change', 2, 3]
✔️ 파이썬의 인덱스 값은 양수와 음수를 모두 사용할 수 있으며, 음수로 입력할 경우 리스트의 끝부분 부터 탐색한다. 인덱스 -1의 경우 가장 마지막 요소를 출력한다.
list_a = [1, 2, 3, 4, 5] |
✔️ 리스트 접근 연산자는 이중으로 사용할 수 있다.
✔️ 리스트 안에 리스트를 사용할 수 있다.
list_a = [1,2,3,"test",True,False]
# list_a의 3번째 인덱스 "test" 출력
print(list_a[3]) # test
# 'test' 문자열의 첫번째 요소 't' 출력
print(list_a[3][0])
# 리스트 안에 리스트를 사용할 수 있다.
list_b = [ [1,2,3], [4,5,6], [7,8,9] ]
print(list_b[0]) # [1, 2, 3]
print(list_b[1]) # [4, 5, 6]
print(list_b[2]) # [7, 8, 9]
print(list_b[0][2]) # 3
[리스트의 연산]
✏️ 문자열에 적용할 수 있는 연산자는 리스트에서도 활용이 가능하다.
✔️ 연결 ( + ) , 반복 ( * ) , len()
list_a = [1,2,3]
list_b = [4,5,6]
# 연결 연산자 ( + ) 를 사용해서 list_a 와 list_b의 자료를 연결한다.
print(list_a+list_b) # [1, 2, 3, 4, 5, 6]
# 반복 연산자 ( * ) 를 사용해서 list_a의 자료를 3번 반복한다.
print(list_a * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
# len(리스트) 는 리스트에 저장된 요소의 개수를 세어 준다.
print(len(list_a)) # 3
[리스트에 요소 추가하기]
✏️ append() : 리스트 뒤에 요소를 추가한다.
✏️ insert() : 리스트의 지정한 위치에 요소를 추가한다.
✏️ extend() : 한 번에 여러 요소를 추가할 때 사용하며, 매개변수로 리스트를 입력한다. 원래 리스트 뒤에 새로운 리스트의 요소를 모두 추가한다.
# 리스트 뒤에 요소 추가 리스트명.append(요소) # 리스트 중간에 요소 추가 리스트명.insert(위치, 요소) # 한 번에 여러 요소 추가 리스트명.extend( [ 리스트] ) |
# 리스트 선언
list_a = [1,2,3]
# 리스트 뒤에 요소 추가
list_a.append(4)
print(list_a) # [1, 2, 3, 4]
# 리스트 중간에 요소 추가
# 인덱스 '0' 위치에 '10' 추가
list_a.insert(0,10)
print(list_a) # [10, 1, 2, 3, 4]
# 한 번에 여러 요소 추가
list_a.extend([5,6,7])
print(list_a) # [10, 1, 2, 3, 4, 5, 6, 7]
★ 리스트 연결 연산자를 사용하는 경우 원본 리스트에 변화가 없으나 (비파괴적 처리) extend() 함수 사용 시 원본 리스트가 변경된다. (파괴적 처리)
[리스트에서 요소 제거하기]
✏️ 인덱스로 제거 : 매개변수로 주어진 인덱스 위치에 있는 요소를 제거한다.
# del 키워드 사용 del 리스트명[인덱스] # pop() 사용 리스트명.pop(인덱스) |
★ pop() 은 매개변수를 입력하지 않으면 -1 로 간주하여, 마지막 요소가 제거된다.
✏️ 값으로 제거 : 리스트 내부에 저장된 값을 지정해서 제거한다.
# remove() 사용 리스트.remove(값) |
★ remove() 는 매개변수로 받은 값이 리스트 내부에 여러 개 있어도 가장 먼저 발견되는 것 하나만 제거한다!
# 리스트 선언
list_a = [1,2,3,4,5,6,7,8,9]
# 0번째 인덱스 요소 삭제
list_a.pop(0)
print(list_a) # [2, 3, 4, 5, 6, 7, 8, 9]
# 매개변수를 입력하지 않았으므로 -1 로 간주하여 마지막 요소 삭제
list_a.pop()
print(list_a) # [2, 3, 4, 5, 6, 7, 8]
# 2번째 인덱스 요소 삭제
del list_a[2]
print(list_a) # [2, 3, 5, 6, 7, 8]
# 값 '3' 삭제
list_a.remove(3)
print(list_a) # [2, 5, 6, 7, 8]
[리스트 슬라이싱]
✏️ [ : ] 연산자로 리스트 범위를 지정하여 여러 요소를 선택할 수 있다.
마지막 위치에 '단계'를 추가하여 지정한 숫자만큼 인덱스를 건너 뛰면서 요소를 가져올 수 있다.
단계는 기본값이 1이므로, 인덱스를 건너뛰어야 하는 경우가 아니면 생략 가능하다.
리스트[시작 인덱스 : 끝 인덱스 : 단계] |
# 리스트 선언
num = [1,2,3,4,5,6,7,8]
# num 리스트의 첫번째 인덱스 부터 4번째 인덱스 까지 출력하는데, 2씩 건너뛴다.
print(num[0:5:2]) #[1, 3, 5]
[clear() / sort() 함수]
✏️ 리스트 내부의 요소를 모두 제거할 때는 clear() 함수를 사용하며, 정렬 시에는 sort() 함수를 사용한다. sort() 는 기본 오름차순 정렬이다.
# clear() 리스트.clear() # sort() 리스트.sort() |
[in / not in 연산자]
✏️ 특정 값이 리스트 내부에 있는 지 확인하려면 in 연산자를 사용한다.
리스트 내부에 값이 있으면 True , 없으면 False를 출력한다.
# 사용법 값 in 리스트 |
✏️ 특정 값이 리스트 내부에 없는 지 확인할 때는 not in 연산자를 사용한다. (in 연산자와 반대로 동작한다.)
# 사용법 값 not in 리스트 |
# 리스트 선언
list_a = [1,2,3,4,5]
# list_a 에 1 이 있으므로 True
print(1 in list_a) # True
# list_a에 6이 없으므로 False
print(6 in list_a) # False
# list_a 에 1 이 있으므로 False
print(1 not in list_a) # False
# list_a에 6이 없으므로 True
print(6 not in list_a) # True
[전개 연산자]
✏️ 리스트 내용을 전개해서 입력할 수 있는 연산자. 리스트 앞에 * 기호를 사용하여 작성한다.
전개 연산자는 기본적으로 리스트 내부 , 함수의 매개변수에 사용한다.
a = [1,2,3]
# 리스트 내부에 전개 연산자 사용 가능.
# *a 는 [1,2,3] 로 전개해서 입력한 것과 같은 효과를 낸다.
b = [*a, *a]
print(b) # [1, 2, 3, 1, 2, 3]
# 함수 매개변수에 전개 연산자 사용 가능.
# print(1,2,3,1,2,3) 처럼 동작한다.
print(*b) # 1 2 3 1 2 3
[딕셔너리]
✏️ 딕셔너리 : 키(key) 를 기반으로 값(value) 을 저장하는 것
✔️ 키는 딕셔너리 내부에서 값에 접근할 때 사용하며, 값은 딕셔너리 내부에 있는 각각의 내용이다.
✏️ 중괄호 {} 로 선언하며, 키:값 형태를 쉼표(,) 로 연결해서 생성한다.
변수 = { 키 : 값, 키 : 값, ... 키 : 값 } |
# 딕셔너리 선언
dict_a = {
"name": "kim", # 문자열을 키로 사용
"age" : 20,
1 : 30, # 숫자를 키로 사용
False: 10 # bool 값을 키로 사용
}
# 딕셔너리 출력
print(dict_a)
>> {'name': 'kim', 'age': 20, 1: 30, False: 10}
# 빈 딕셔너리 선언
dict_b = {}
★ 딕셔너리의 키를 문자열로 사용 시 따옴표 (" ") 를 붙여야 한다.
[딕셔너리 요소에 접근하기]
★ 딕셔너리를 선언할 때는 { } 를 사용하지만, 요소에 접근할 때는 딕셔너리 뒤에 [ ] 를 입력하고 괄호 내부에 인덱스처럼 키를 입력한다.
✏️ 딕셔너리 내부에는 문자열, 숫자, bool, 리스트, 딕셔너리 등 다양한 자료를 넣을 수 있다.
# 딕셔너리 선언
dict_a = {
"name" : "포카칩",
"price" : 1500,
"store" : ["편의점", "대형마트", "슈퍼"],
"flavor" : "original"
}
print(dict_a)
>> {'name': '포카칩', 'price': 1500, 'store': ['편의점', '대형마트', '슈퍼'], 'flavor': 'original'}
print(dict_a["name"])
>> 포카칩
print(dict_a["store"])
>> ['편의점', '대형마트', '슈퍼']
# 인덱스를 지정하여 딕셔너리 안의 리스트에 대한 특정 값을 출력할 수 있다.
print(dict_a["store"][0])
>> 편의점
[딕셔너리에 값 추가/제거]
✏️ 딕셔너리에 값을 추가할 때는 키를 기반으로 입력한다.
딕셔너리[새로운 키] = 새로운 값 # 딕셔너리에 이미 존재하는 키를 지정하고 값을 넣으면 기존의 값을 새로운 값으로 변경한다. 딕셔너리[기존 키] = 새로운 값 |
✏️ 딕셔너리에 값을 제거할 때는 del 키워드를 사용한다.
# 해당 키와 요소 제거 del dict_a[키] |
# 딕셔너리 선언
dict_a = {
"name" : "포카칩",
"price" : 1500,
"store" : ["편의점", "대형마트", "슈퍼"],
"flavor" : "original"
}
# 딕셔너리 값 추가
dict_a["manufacturer"]="오리온"
print(dict_a)
>> {'name': '포카칩', 'price': 1500, 'store': ['편의점', '대형마트', '슈퍼'], 'flavor': 'original', 'manufacturer': '오리온'}
# 딕셔너리 값 변경
dict_a["flavor"]="onion"
print(dict_a)
>> {'name': '포카칩', 'price': 1500, 'store': ['편의점', '대형마트', '슈퍼'], 'flavor': 'onion', 'manufacturer': '오리온'}
# 딕셔너리 값 삭제
del dict_a["manufacturer"]
print(dict_a)
>> {'name': '포카칩', 'price': 1500, 'store': ['편의점', '대형마트', '슈퍼'], 'flavor': 'onion'}
[딕셔너리에 값이 있는 지 확인]
✏️ in 키워드
✔️ 딕셔너리 내부에 키가 있는지 확인할 때 in 키워드를 사용할 수 있다.
✏️ get() 함수
✔️ get() 은 딕셔너리의 키로 값을 추출하는 함수인데, 존재하지 않는 키에 접근할 경우 None 을 출력한다.
# 딕셔너리 선언
dict_a = {
"name" : "포카칩",
"price" : 1500,
"store" : ["편의점", "대형마트", "슈퍼"],
"flavor" : "original",
"manufacturer" : "오리온"
}
# 키가 존재하는지 확인 : in 연산자 사용
if "name" in dict_a:
print(dict_a["name"])
>> 포카칩
# 존재하지 않는 경우
if "test" in dict_a:
print(dict_a["test"])
else:
print("존재하지 않는 키입니다.")
>> 존재하지 않는 키입니다.
# 키가 존재하는지 확인 : get() 사용
value = dict_a.get("name")
if value == None:
print("존재하지 않는 키입니다.")
else:
print(value)
>> 포카칩
# 키가 존재하지 않는 경우 : value 값이 None
value = dict_a.get("test")
# value 값이 None인지 확인
if value == None:
print("존재하지 않는 키입니다.")
else:
print(value)
>> 존재하지 않는 키입니다.
★ 리스트와 딕셔너리 비교
리스트 | 딕셔너리 | |
의미 | 인덱스를 기반으로 값을 저장함 | 키를 기반으로 값을 저장함 |
가리키는 위치 | 인덱스 | 키 |
선언 형식 | 변수=[] | 변수={} |
값 사용 방식 | list_a[1] | dict_a["name"] |
값 추가 방식 | list_a.append(5) | list_a["age"]=20 |
list_a.insert(1, 5) | ||
값 제거 방식 | del list_a[1] | del dict_a["name"] |
list_a.pop(1) |
[범위 자료형]
✏️ 범위(range) : 정수의 범위를 나타내는 값으로, 특정한 횟수 만큼 반복해서 돌리고 싶을 경우 for 반복문과 범위를 조합해서 사용한다. range() 함수를 사용하여 범위를 만들 수 있다.
[range() 사용법]
1️⃣ 매개변수에 숫자 한 개 입력
# 0부터 N-1 까지의 정수로 범위 생성 range(N) |
2️⃣ 매개변수에 숫자 두 개 입력
# N 부터 M-1 까지의 정수로 범위 생성 range(N,M) |
3️⃣ 매개변수에 숫자 세 개 입력
# N 부터 M-1 까지의 정수로 범위 생성, 앞 뒤 숫자가 C 만큼의 간격이 있다. range(N,M,C) |
# 범위 선언
range_a = range(5) # 1번 방법, 0부터 4까지 정수로 범위 생성
range_b = range(1,5) # 2번 방법, 1부터 4까지 정수로 범위 생성
range_c = range(1,10,2) # 3번 방법, 1부터 2씩 증가하면서 9까지 정수로 범위 생성
# 범위를 리스트로 변경하여 범위 내부에 어떤 값이 들어있는 지 확인 가능하다.
print(list(range_a))
>> [0, 1, 2, 3, 4]
print(list(range_b))
>> [1, 2, 3, 4]
print(list(range_c))
>> [1, 3, 5, 7, 9]
★ 범위 생성 시 매개변수로 무조건 정수를 입력해야 한다.
n = 10 a = range( 0, int( n / 2 ) ) # n/2 의 결과 값인 실수를 정수로 바꿔주거나 a = range( 0, n // 2 ) # 정수 나누기 연산자를 사용해서 몫만 가져온다! |
[반복문]
★ 특정 코드를 반복해서 실행할 때 사용하는 구문.
[for 반복문]
✏️ 딕셔너리 , 리스트, 범위 자료형 등과 함께 사용된다.
# for 반복문의 기본적인 형태 for 반복자 in 반복할 수 있는 것: # 반복할 수 있는 것에는 문자열, 리스트, 딕셔너리, 범위 등이 있다. 코드 |
list_a = [1,2,3,4,5]
# list_a 에 있는 요소 하나 하나가 element 변수 안에 들어간다
# 리스트의 요소를 차례차례 출력
for element in list_a:
print(element)
# 출력
1
2
3
4
5
✏️ 딕셔너리와 for 반복문 사용하기
★ 딕셔너리 내부에 있는 키가 변수에 들어간다는 점에 유의한다!
for 키 변수 in 딕셔너리: 코드 |
dict_a = {
"name" : "포카칩",
"price" : 1500,
"store" : ["편의점", "대형마트", "슈퍼"],
"flavor" : "original",
"manufacturer" : "오리온"
}
for key in dict_a:
print(key ,":", dict_a[key])
[출력]
name : 포카칩
price : 1500
store : ['편의점', '대형마트', '슈퍼']
flavor : original
manufacturer : 오리온
✏️ 범위 자료형과 for 반복문 사용하기
for 숫자 변수 in 범위: 코드 |
# 기본적인 범위 자료형과 for 반복문 조합
for i in range(5):
print(i)
[출력]
0
1
2
3
4
# 리스트와 범위를 조합해서 사용 가능
# 현재 몇번째 요소를 출력하는지 알 수 있다.
array = [1,2,3,4,5]
for i in range(len(array)):
print("{} 번째 요소 {}".format(i, array[i]))
[출력]
0 번째 요소 1
1 번째 요소 2
2 번째 요소 3
3 번째 요소 4
4 번째 요소 5
[while 반복문]
✏️ 조건을 활용해서 반복할 때 사용한다. for 반복문은 특정 코드를 N번 반복하며, while 반복문은 <불 표현식> 이 참인 동안 문장을 계속 반복한다.
while 불 표현식: 문장 # 무한루프 while True: 문장 |
i = 0
# i < 5 를 만족하는 동안만 실행한다.
while i < 5:
print("{} 번째 반복입니다.".format(i))
i += 1
[출력]
0 번째 반복입니다.
1 번째 반복입니다.
2 번째 반복입니다.
3 번째 반복입니다.
4 번째 반복입니다.
✏️ break 키워드는 반복문을 벗어날 때 사용하는 키워드이다.
# break 사용 예시
i = 0
# 무한루프
while True:
print("i 의 값 : {}".format(i))
# i 값 1씩 증가
i += 1
# i 값이 5보다 커지면 반복문 종료
if i > 5:
print("무한루프 종료")
break
[출력]
i 의 값 : 0
i 의 값 : 1
i 의 값 : 2
i 의 값 : 3
i 의 값 : 4
i 의 값 : 5
무한루프 종료
✏️ continue 키워드는 현재 반복을 생략하고 다음 반복으로 넘어갈 때 사용하는 키워드이다.
# continue 사용 예시
list_a = [10,4,20,1,15,9,30]
for item in list_a:
# item 이 10보다 작으면 다음 반복으로 넘어간다.
if item < 10:
continue
print(item)
[출력]
10
20
15
30
[선택 미션 : p.213 쪽의 1번 문제의 답 쓰고 인증하기]
✔️ list의 extend 함수는 리스트 뒤에 매개변수로 받은 리스트 요소를 모두 추가해 준다.
✔️ list의 append 함수는 리스트 뒤에 매개변수로 받은 요소를 추가한다.
✔️ list의 insert 함수는 첫 번째 매개변수로 위치, 두 번째 매개변수로 요소를 받는다. 따라서 위 예제에서는 list_a의 3번째 인덱스에 '0' 을 추가해 준다.
✔️ list의 remove 함수는 매개변수로 받은 요소를 제거한다. 매개변수로 받은 값이 리스트 내에 여러 개 있어도 처음 발견하는 하나만 제거한다.
✔️ list의 pop 함수는 매개변수로 받은 인덱스 위치의 요소를 제거한다.
✔️ list의 clear 함수는 리스트 내부의 요소를 모두 제거한다.
'개발 > 혼공학습단_11기' 카테고리의 다른 글
[혼공파] 혼자 공부하는 파이썬_5주차 (0) | 2024.02.04 |
---|---|
[혼공파] 혼자 공부하는 파이썬_4주차 (0) | 2024.01.28 |
[혼공파] 혼자 공부하는 파이썬_2주차 (2) (0) | 2024.01.13 |
[혼공파] 혼자 공부하는 파이썬_2주차 (1) (2) | 2024.01.13 |
[혼공파] 혼자 공부하는 파이썬_1주차 (1) | 2024.01.06 |