👩🏻💻 ,,,,족장님이 3주차가 젤 힘들거라고 하더니, 진짜다...
일주일 내내 독감인지 감기인지 한참 앓아 눕다가 그날까지 겹쳐서 진짜 죽다 살아났다,,🤕
하지만 뭐 이것도 다 변명일 뿐,, 할려고 했으면 했겠지,,,
반성 끝. 4주차 부터는 다시 부지런히 하자고 나자신!
암튼 3주차도 고고 ~
[기본 미션]
Q) 리스트, 딕셔너리, 범위 자료형에 대해 포스팅하기
04-1. 리스트와 반복문
▷핵심 키워드 - 리스트 / 요소 / 인덱스 / for 반복문
✍🏻리스트: 독립적인 자료들을 모아서 사용할 수 있게 해주는 특별한 형태의 자료
👉🏻리스트는 대괄호[] 내부에 여러 종류의 자료를 넣어 선언한다
✏️리스트 선언하고 요소에 접근하기
-파이썬에서 리스트 생성하는 방법: 대괄호[]에 자료를 쉼표로 구분해서 입력한다.
-요소(element): 대괄호[] 내부에 넣는 자료
[요소, 요소, 요소...]
-리스트는 한 가지 자료형만으로 구성할 수 있고, 여러 종류의 자료형으로 구성할 수도 있다.
>>>[1,2,3,4]
[1,2,3,4] #숫자만으로 구성된 리스트
>>>["안","녕","하","세","요"]
['안','녕','하','세','요'] #문자열만으로 구성된 리스트
>>>[273,32,103,"문자열",True,False]
[273,32,103,'문자열',True,False] #여러 자료형으로 구성된 리스트
-리스트의 요소는 0부터 센다.
list_a=[273,32,103,"문자열",True,False]
273 | 32 | 103 | 문자열 | True | False |
[0] | [1] | [2] | [3] | [4] | [5] |
>>>list_a=[273,32,103,"문자열",True,False]
>>>list_a[0]
273
>>>list_a[1]
32
>>>list_a[2]
103
list_a[1:3]
[32,103]
-리스트의 특정 요소는 변경할 수 있다.
>>>list_a=[273,32,103,"문자열",True,False]
>>>list_a[0]="변경"
>>>list_a
['변경',32,103,'문자열',True,False]
🌟리스트 사용방법
① 대괄호 안에 음수를 넣어 뒤에서부터 요소를 선택할 수 있다.
>>>list_a=[273,32,103,"문자열",True,False]
>>>list_a[-1]
False
>>>list_a[-2]
True
>>>list_a[-3]
'문자열'
273 | 32 | 103 | 문자열 | True | False |
[-6] | [-5] | [-4] | [-3] | [-2] | [-1] |
② 리스트 접근 연산자를 이중으로 사용할 수 있다.
>>>list_a=[273,32,103,"문자열",True,False]
>>>list_a[3]
'문자열'
>>>list_a[3][0]
'문'
👉🏻list_a[3]을 지정하면 '문자열'을 꺼내오고, list_a[3][0]을 지정하면 3번째에서 가져온 "문자열"에서 다시 0번째를 가져와 출력한다.
③ 리스트 안에 리스트를 사용할 수도 있다.
>>>list_a=[[1,2,3],[4,5,6],[7,8,9]]
>>>list_a[1]
[4,5,6]
>>>list_a[1][1]
5
👻 리스트에서 IndexError 예외
-IndexError: 리스트의 길이를 넘는 인덱스로 요소에 접근하려 할 때 발생하는 예외 👉🏻 요소가 존재하지 않는 위치에서 요소를 꺼내려고 하니 예외가 발생하는 것
<예제>
-결과
✏️리스트 연산하기: 연결(+), 반복(*), len()
-문자열과 리스트는 비슷한 자료형으로, 사용할 수 있는 연산자와 함수도 비슷하다
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️리스트에 요소 추가하기: append(), insert()
-리스트에 요소를 추가할 때는 두 가지 방법: append(), insert()
① append() 함수 활용 - 리스트 뒤에 요소를 추가
리스트명.append(요소)
② insert() 함수 활용 - 리스트의 중간에 요소를 추가
리스트명.insert(위치, 요소)
🖐🏻직접 해보는 손코딩🖐🏻
-결과
👉🏻append() 함수는 현재의 리스트 뒤쪽에 요소를 추가하는 것으로, list_a=[1,2,3]의 뒤에 4와 5가 추가되어 list_a=[1,2,3,4,5]가 된 것
👉🏻insert() 함수는 괄호 안에서 정해 준 위치에 요소를 삽입하는 것으로, 해당 위치의 요소는 뒤로 하나씩 밀려 list_a=[10,1,2,3,4,5]가 되는 것
📋한 번에 여러 요소를 추가하고 싶을 때는 extend() 함수를 사용한다.
-extend() 함수: 매개변수로 리스트를 입력하는데, 원래 리스트 뒤에 새로운 리스트의 요소를 모두 추가한다
>>>list_a=[1,2,3]
>>>list_a.extend([4,5,6]) #매개변수를 리스트 형태로 넣음
>>>print(list_a)
[1,2,3,4,5,6]
👻리스트 연결 연산자와 요소 추가의 차이
-리스트 연결 연산자와 extend() 함수는 리스트와 리스트를 연결한다는 기능에서 비슷한 형태로 동작한다
⚠️하지만 리스트 연결 연산자는 원본에 어떠한 영향도 주지 않지만, extend() 함수는 원본에 직접적으로 영향을 준다.
-리스트 연결 연산자: 비파괴적
-append(), insert(), extend() 함수: 파괴적
👉🏻자료는 선택지가 더 넓어지는 측면에서 비파괴적으로 사용하는 것이 편리하다. 하지만 그렇게 되면 리스트의 용량이 매우 커질 수 있다.
✏️리스트에 요소 제거하기
- 인덱스로 제거하기
- 값으로 제거하기
👻인덱스로 요소 제거하기: del 키워드, pop()
del 리스트명[인덱스]
👆🏻del 키워드는 리스트의 특정 인덱스에 있는 요소를 제거한다.
리스트명.pop(인덱스)
👆🏻pop() 함수는 제거할 위치에 있는 요소를 제거 / 매개변수를 입력하지 않으면 -1이 들어가는 것으로 취급해서 마지막 요소를 제거한다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
📋del 키워드를 사용할 경우에는 범위를 지정해 리스트의 요소를 한꺼번에 제거할 수도 있다.
>>>list_b=[0,1,2,3,4,5,6]
del list_b[3:6]
>>>list_b
[0,1,2,6]
>>>list_c=[0,1,2,3,4,5,6]
>>>del list_c[:3] #[:3]은 3을 기준(3번째 불포함)으로 왼쪽을 모두 제거하는 것
>>>list_c
[3,4,5,6]
👻값으로 제거하기: remove()
리스트.remove(값)
>>>list_c=[1,2,1,2]
>>>list_c.remove(2)
>>>list_c
[1,1,2]
👆🏻 remove() 함수로 지정한 값이 내부에 여러 개 있어도 가장 먼저 발견되는 하나만 제거한다
👻모두 제거하기: clear()
리스트.clear()
>>>list_d=[0,1,2,3,4,5]
>>>list_d.clear()
>>>list_d
[]
👆🏻요소가 모두 제거됨
✏️리스트 정렬하기: sort()
-기본 오름차순 정렬로 리스트 요소가 정렬된다
리스트.sort()
>>>list_e=[52,273,103,32,275,1,7]
>>>list_e.sort() #오름차순 정렬
>>>list_e
[1,7,32,52,103,273,275]
>>>list_e.sort(reverse=True) #내림차순 정렬
>>>list_e
[275,273,103,52,32,7,1]
📋지금까지 살펴보았던 모든 리스트의 함수들은 파괴적으로 동작한다
✏️리스트 내부에 있는지 확인하기: in/not in 연산자
-in 연산자를 활용해 특정 값이 리스트 내부에 있는지 확인할 수 있다
값 in 리스트
>>>list_a=[273,32,103,57,52]
>>> 273 in list_a
True
>>> 99 in list_a
False
>>>100 in list_a
False
>>>52 in list_a
True
👆🏻리스트 내부에 값이 있으면 True, 없으면 False를 출력한다
📋not in 연산자 - in 연산자와 정확하게 반대로 동작한다
list_a=[273,32,103,57,52]
>>>273 not in list_a
False
>>>99 not in list_a
True
>>>100 not in list_a
True
>>>52 not in list_a
False
>>>not 273 in list_a
False
👉🏻not in 연산자를 사용하는 것이 훨씬 읽기 쉽다.
✏️for 반복문
-코드를 100번, 1000번 또는 무한하게 반복 작업하고 싶을 때 붙여넣기를 하는 것은 무리가 있다. 이럴 때 for 반복문을 사용한다
for i in range(100):
print("출력")
👆🏻출력을 100번 반복한다.
✏️for 반복문: 리스트와 함께 사용하기
👇🏻for 반복문의 기본형태
for 반복자 in 반복할 수 있는 것:
코드
📋반복할 수 있는 것에는 문자열, 리스트, 딕셔너리, 범위 등이 있다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
+) for 반복문은 문자열과 함께 사용할 수도 있다.
-결과
✏️중첩 리스트와 중첩 반복문
-중첩 반복문은 일반적으로 n-차원 처리를 할 때 사용한다.
중첩 리스트 표현: list_of_list / 리스트가 2번 중첩되어 있으므로 2차원 리스트라고도 한다
🖐🏻직접 해보는 손코딩1🖐🏻
-2차원 리스트에 반복문 한번 사용
-결과
🖐🏻직접 해보는 손코딩2🖐🏻
-2차원 리스트에 반복문 두번 사용
-결과
4-1 chapter 마무리
🔎핵심 포인트
-리스트는 여러가지 자료를 저장할 수 있는 자료형
-요소는 리스트 내부에 있는 각각의 내용
-인덱스는 리스트 내부에서 값의 위치
-for 반복문은 특정 코드를 반복해서 실행할 때 사용하는 기본적인 구문
[선택 미션]
Q) 1번 문제의 답을 쓰고 인증하기
04-2. 딕셔너리와 반복문
▷ 핵심 키워드 - 딕셔너리 / 키 / 값
✍🏻리스트가 '인덱스를 기반으로 값을 저장하는 것'이라면, 딕셔너리는 '키를 기반으로 값을 지정하는 것'
자료형 | 의미 | 가리키는 위치 | 선언 형식 |
리스트 | 인덱스를 기반으로 값을 저장 | 인덱스 | 변수=[] |
딕셔너리 | 키를 기반으로 값을 저장 | 키 | 변수={} |
✏️딕셔너리 선언하기
-딕셔너리는 중괄호{}로 선언하며, 키:값 형태를 쉼표(,)로 연결해서 만든다.
-키는 문자열, 숫자, 불 등으로 선언할 수 있다. / 일반적으로는 문자열로 사용하는 경우가 많다.
>>>dict_a = {
... "name" : "어벤저스 엔드게임",
... "type" : "히어로 무비"
... }
✏️딕셔너리의 요소에 접근하기
>>>dict_a = {
... "name" : "어벤저스 엔드게임",
... "type" : "히어로 무비"
... }
>>>dict_a
{'name' : '어벤저스 엔드게임', 'type' : '히어로 무비'}
>>>dict_a["name"]
'어벤저스 엔드게임'
>>>dict_a["type"]
'히어로 무비'
📋딕셔너리를 선언할 때는 중괄호{} 사용 / 딕셔너리의 요소에 접근할 때는 리스트처럼 딕셔너리 뒤에 대괄호[]를 입력하고 내부에 인덱스처럼 키를 입력해야 한다.
구분 | 선언 형식 | 사용 예 | 틀린 예 |
리스트 | list_a = [] | list_a[1] | |
딕셔너리 | dict_a = {} | dict_a["name"] | dict_a{"name"} |
🖐🏻직접 해보는 손코딩🖐🏻
-결과
+) ingredient는 dictionary의 키이기도 하지만, 여러 개의 자료를 가지고 있는 리스트이기도 하므로 인덱스를 지정하여 리스트 안의 특정 값을 출력할 수도 있다.
>>>dictionary["ingredient"]
['망고', '설탕', '메타중아황산나트륨', '치자황색소']
>>>dictionary["ingredient"][1]
'설탕'
👻딕셔너리의 문자열 키와 관련된 실수
-결과
👉🏻name이라는 이름이 정의되지 않았다는 오류 / 파이썬은 딕셔너리의 키에 따옴표 없이 단순하게 식별자를 입력하면 이를 변수로 인식하게 된다. 아래와 같이 name이라는 이름을 변수로 만들어 주면 해결된다.
-결과
📋type은 type() 함수라는 기본 식별자가 있기 때문에 이것이 키로 들어가 따로 오류를 발생시키지 않는다.
✏️딕셔너리에 값 추가하기/제거하기
-딕셔너리에 값을 추가할 때는 키를 기반으로 값을 입력한다.
딕셔너리[새로운 키] = 새로운 값
<예제>
-결과
-딕셔너리의 요소를 제거할 때에는 del 키워드를 사용한다.
<예제>
-결과
🖐🏻직접 해보는 손코딩1🖐🏻
-딕셔너리에 요소 추가하기
-결과
🖐🏻직접 해보는 손코딩2🖐🏻
-두 개의 요소를 가진 딕셔너리를 선언하고, 이 두 요소를 제거해보기
-결과
👻KeyError 예외
-존재하지 않는 키에 접근하면 KeyError가 발생한다.
>>>dictionary = {}
>>>dictionary["Key"]
⚠️오류 발생
👉🏻딕셔너리는 키를 기반으로 값을 저장하므로 에러가 발생하는 것
✏️딕셔너리 내부에 키가 있는지 확인하기
-딕셔너리에 존재하지 않는 키에 접근하면 KeyError가 발생할 수도 있으므로, 존재하는 키인지 아닌지를 확인할 수 있는 방법이 필요하다.
① 첫 번째 방법: in 키워드
-사용자로부터 접근하고자 하는 키를 입력받은 후, 존재하는 경우에만 접근해서 값을 출력한다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
② 두 번째 방법: get() 함수
-get() 함수는 딕셔너리의 키로 값을 추출하는 기능으로, 존재하지 않는 키에 접근할 경우 KeyError를 발생시키지 않고 None을 출력한다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️for 반복문: 딕셔너리와 함께 사용하기
for 키 변수 in 딕셔너리:
코드
🖐🏻직접 해보는 손코딩🖐🏻
-결과
4-2 chapter 마무리
🔎핵심 포인트
-딕셔너리는 키를 기반으로 여러 자료를 저장하는 자료형
-키는 딕셔너리 내부에서 값에 접근할 때 사용하는 것
-값은 딕셔너리 내부에 있는 각각의 내용을 의미
04-3. 범위 자료형과 while 반복문
▷핵심 키워드 - 범위 / while 반복문 / break 키워드 / continue 키워드
✍🏻for 반복문과 함께 많이 사용되는 자료형은 범위(range)이다. 특정한 횟수만큼 반복해서 돌리고 싶을 때는 for 반복문과 범위를 조합해서 사용한다.
✏️범위
-정수로 이루어진 범위를 만들 때는 range() 함수를 사용한다. 범위는 다음과 같이 3가지 방법으로 사용할 수 있다.
① 매개변수에 숫자를 한 개 넣는 방법: 0부터 A-1까지의 정수로 범위를 만든다.
range(A)
👉🏻A는 숫자
② 매개변수에 숫자를 두 개 넣는 방법: A부터 B-1까지의 정수로 범위를 만든다.
range(A, B)
👉🏻A와 B는 숫자
③ 매개변수에 숫자를 세 개 넣는 방법: A부터 B-1까지의 정수로 범위를 만드는데, 앞뒤의 숫자가 C만큼의 차이를 가진다.
range(A, B, C)
👉🏻A, B, C는 숫자
📋범위를 만들 때 매개변수 내부에 수식을 사용하는 경우도 많다.
✏️for 반복문: 범위와 함께 사용하기
for 숫자 변수 in 범위:
코드
🖐🏻직접 해보는 손코딩🖐🏻
-결과
👉🏻첫 번째 반복문은 [0,1,2,3,4], 두 번째 반복문은 [5,6,7,8,9], 세 번째 반복문은 [0,3,6,9]로 반복이 일어난다.
✏️for 반복문: 리스트와 범위 조합하기
-반복을 적용하다보면 몇 번째 반복인지를 알아야 하는 경우가 있다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️for 반복문: 반대로 반복하기
-위 반복문은 반복 변수가 작은 숫자에서 큰 숫자 순서로 올라갔다. 하지만 반복 변수가 큰 숫자에서 작은 숫자로 반복문을 적용해야 하는 경우가 있는데, 이러한 반복문을 역반복문이라고 한다.
① 역반복문 첫 번째 방법: range() 함수의 매개변수를 세 개 사용하는 방법
🖐🏻직접 해보는 손코딩1🖐🏻
-결과
② 역반복문 두 번째 방법: reversed() 함수를 사용하는 방법
🖐🏻직접 해보는 손코딩2🖐🏻
-결과
👉🏻reversed() 함수를 적용하면 [0,1,2,3,4]라는 형태의 범위가 [4,3,2,1,0]으로 뒤집어진다.
✏️중첩 반복문으로 피라미드 만들기
🖐🏻직접 해보는 손코딩1🖐🏻
-결과
🖐🏻직접 해보는 손코딩2🖐🏻
-결과
✏️while 반복문
while 불 표현식:
문장
👉🏻while 반복문은 <불 표현식>이 참인 동안 문장을 계속 반복한다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️while 반복문: for 반복문처럼 사용하기
🖐🏻직접 해보는 손코딩🖐🏻
-결과
📋while 반복문에서 가장 중요한 키워드는 조건이다. 조건을 활용해서 반복을 사용해야 한다면 while 반복문을 사용하는 것이 좋다.
✏️while 반복문: 상태를 기반으로 반복하기
-remove() 함수는 리스트 내부에서 해당하는 값을 하나만 제거할 수 있다. while 반복문을 활용하면 여러 개를 제거할 수 있다. while 반복문의 조건을 '리스트 내부에 요소가 있는 동안'으로 지정한다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
👉🏻리스트 내부에 있는 모든 2가 제거될 때까지 반복하기 때문에 2가 모두 제거된 결과가 출력된다.
✏️while 반복문: 시간을 기반으로 반복하기
-시간을 기반으로 반복할 때에는 유닉스 타임을 이용한다.
📋유닉스 타임: 세계 표준시로 1970년 1월 1일 0시 0분 0초를 기준으로 몇 초가 지났는지 정수로 나타낸 것
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️while 반복문: break 키워드 / continue 키워드
-break와 continue 키워드는 반복문 내부에서만 사용할 수 있다.
-break 키워드는 반복문을 벗어날 때 사용하는 키워드 / 일반적으로 무한 반복문을 만들고, 내부의 반복문을 벗어날 때 많이 사용한다.
🖐🏻직접 해보는 손코딩1🖐🏻
-결과
🖐🏻직접 해보는 손코딩2🖐🏻
-continue 키워드: 현재 반복을 생략하고, 다음 반복으로 넘어갈 때 사용하는 키워드
-결과
4-3 chapter 마무리
🔎핵심 포인트
-범위는 정수의 범위를 나타내는 값. range() 함수로 생성한다.
-while 반복문은 조건식을 기반으로 특정 코드를 반복해서 실행할 때 사용하는 구문
-break 키워드는 반복문을 벗어날 때 사용하는 구문
-continue 키워드는 반복문의 현재 반복을 생략할 때 사용하는 구문
04-4. 문자열, 리스트, 딕셔너리와 관련된 기본 함수
▷ 핵심 키워드 - reversed() / enumerate() / items() / 리스트 내포
✍🏻파이썬만의 고유한 기능들
- 리스트에 적용할 수 있는 기본 함수: min(), max(), sum()
- 리스트 뒤집기: reversed()
- 현재 인덱스가 몇 번째인지 확인하기: enumerate()
- 딕셔너리로 쉽게 반복문 작성하기: items()
- 리스트 안에 for문 사용하기: 리스트 내포
✏️리스트에 적용할 수 있는 기본 함수: min(), max(), sum()
함수 | 설명 |
min() | 리스트 내부에서 최솟값을 찾습니다. |
max() | 리스트 내부에서 최댓값을 찾습니다. |
sum() | 리스트 내부에서 값을 모두 더합니다. |
✏️reversed() 함수로 리스트 뒤집기
-리스트에서 요소의 순서를 뒤집고 싶을 때는 reversed() 함수를 사용한다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️enumerate() 함수와 반복문 조합하기
-리스트의 요소를 반복할 때 현재 인덱스가 몇 번째인지 확인해야 하는 경우가 많은데, 파이썬은 이런 코드를 쉽게 작성할 수 있도록 enumerate() 함수를 제공한다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️딕셔너리의 items() 함수와 반복문 조합하기
-딕셔너리는 items() 함수와 함께 사용하면 키와 값을 조합해서 쉽게 반복문을 작성할 수 있다.
🖐🏻직접 해보는 손코딩🖐🏻
-결과
✏️리스트 내포
🖐🏻직접 해보는 손코딩1🖐🏻
-결과
👆🏻위를 한 줄로 작성할 수 있다. 리스트 안에 for문을 사용하면 된다.
🖐🏻직접 해보는 손코딩2🖐🏻
-결과 위와 똑같음
📋리스트 내포
리스트 이름 = [ 표현식 for 반복자 in 반복할 수 있는 것 ]
-다음과 같이 if 구문을 넣어 조건을 조합할 수 있다.
리스트 이름 = [ 표현식 for 반복자 in 반복할 수 있는 것 if 조건문 ]
🖐🏻직접 해보는 손코딩3🖐🏻
-결과
4-4 chapter 마무리
🔎핵심 마무리
-reversed() 함수는 매개변수에 리스트를 넣으면 요소의 순서를 뒤집을 수 있다
-enumerate() 함수는 매개변수에 리스트를 넣으면 인덱스와 값을 쌍으로 사용해 반복문을 돌릴 수 있게 해주는 함수
-items() 함수는 키와 쌍으로 사용해 반복문을 돌릴 수 있게 해주는 딕셔너리 함수
-리스트 내포는 반복문과 조건문을 대괄호[] 안에 형태를 사용해서 리스트를 생성하는 파이썬의 특수한 구문
'코딩 공부 > 파이썬 (혼공단 11기)' 카테고리의 다른 글
[혼공파] 6주차_07-2 ~ 08 (0) | 2024.02.07 |
---|---|
[혼공파] 5주차_06 ~ 07-1 (0) | 2024.02.01 |
[혼공파] 4주차_05 (0) | 2024.01.24 |
[혼공파] 2주차_02-3 ~ 03 (0) | 2024.01.12 |
[혼공파] 1주차_01-1 ~ 02-2 (0) | 2024.01.03 |