혼공파 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 함수는 리스트 내부의 요소를 모두 제거한다.

+ Recent posts