리스트란?
파이썬에서 리스트의 의므는 여러가지 자료를 저장할 수 있는 자료
- 리스트 생성 방법: 대괄호[]에 자료를 쉼표로 구분하여 입력함
- 요소: 대괄호[] 내부에 넣는 자료
- 인덱스: 대괄호[] 안에 들어간 숫자
리스트 사용 방법
- 대괄호 안에 음수를 넣어 뒤에서부터 요소 선택
list_a = [273, 32, 103, "문자열", True, False]
list_a[-1]
False
list_a[-2]
True
list_a[-3]
'문자열'
2. 리스트 접근 연산자를 이중으로 사용 가능
list_a = [273, 32, 103, "문자열", True, False]
list_a[3]
'문자열'
list_a[3][0]
'문'
3. 리스트 안에 리스트 사용 가능
list_a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list_a[1]
[4, 5, 6]
list_a[1][1]
5
! 리스트에서의 IndexError 예외
: 리스트에 [3]번째 요소가 없으므로 IndexError 발생
list_a = [273, 32, 103]
list_a[3]
리스트 연산하기: 연결(+), 반복(*), len()
# 리스트를 선언합니다.
list_a = [1, 2, 3]
list_b = [4, 5, 6]
# 출력합니다.
print("# 리스트")
print("list_a =", list_a)
print("list_b =", list_b)
print()
# 기본 연산자
print("# 리스트 기본 연산자")
print("list_a + list_b =", list_a + list_b)
print("list_a * 3 =", list_a * 3)
print()
# 함수
print("# 길이 구하기")
print("len(list_a) =", len(list_a))
# 결과값
# 리스트
list_a = [1, 2, 3]
list_b = [4, 5, 6]
# 리스트 기본 연산자
list_a + list_b = [1, 2, 3, 4, 5, 6]
list_a * 3 = [1, 2, 3, 1, 2, 3, 1, 2, 3]
# 길이 구하기
len(list_a) = 3
리스트에 요소 추가하기: append(), insert(), extend()
- append(): 리스트 뒤에 요소 추가
- insert(): 리스트 중간에 요소 추가(*위치 지정 필요)
- extend(): 한 번에 여러 요소 추가(*append() 함수를 반복 실행한 효과)
# 리스트를 선언합니다.
list_a = [1, 2, 3]
# 리스트 뒤에 요소 추가하기
print("# 리스트 뒤에 요소 추가하기")
list_a.append(4)
list_a.append(5)
print(list_a)
print()
# 리스트 중간에 요소 추가하기
print("# 리스트 중간에 요소 추가하기")
list_a.insert(0, 10)
print(list_a)
# 결과값
# 리스트 뒤에 요소 추가하기
[1, 2, 3, 4, 5]
# 리스트 중간에 요소 추가하기
[10, 1, 2, 3, 4, 5]
# extend() 함수 이용하기
list_a = [1, 2, 3]
list_b = [4, 5, 6]
list_a.extend(list_b) # -> 실행 결과로 아무것도 출력하지 않음
list_a
[1, 2, 3, 4, 5, 6]
list_b
[4, 5, 6]
리스트 연결 연산자와 요소 추가의 차이
파괴적 처리: 원본에 영향을 끼침(eg. append(), insert(), extend())
비파괴적 처리: 원본에 연향을 끼치지 않음(eg. 기본 자료형(숫자, 문자, 열, 불) 등)
리스트에 요소 제거하기: 인덱스로 제거, 값으로 제거
- 인덱스로 제거하기: del 키워드, pop()
- 값으로 제거하기: remove() (*가장 먼저 발견되는 하나만 제거)
- 모두 제거하기: clear()
# 인덱스로 제거하기: del 키워드, pop()
list_a = [0, 1, 2, 3, 4, 5]
print("# 리스트의 요소 하나 제거하기")
# 제거 방법[1] - del 키워드
del list_a[1]
print("del list[1]:", list_a)
# 제거 방법[2] - pop()
list_a.pop(2)
print("pop(2):", list_a)
# 결과값
# 리스트의 요소 하나 제거하기
del list[1]: [0, 2, 3, 4, 5]
pop(2): [0, 2, 4, 5]
- 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]
list_c
[3, 4, 5, 6]
list_d = [0, 1, 2, 3, 4, 5, 6]
del list_d[3:]
list_d
[0, 1, 2]
슬라이싱: 리스트에 [:] 연산자로 리스트 범위를 지정하여 여러 요소를 선택하는 것
-> 리스트[시작_인덱스:끝_인덱스:단계]
단계는 기본값이 1이므로 요소를 건너뛰며 가져와야 하는 경우가 아니라면 생략
# 값으로 제거하기: remove()
list_c = [1, 2, 1, 2]
list_c.remove(2)
list_c
[1, 1, 2]
# 모두 제거하기: clear()
list_d = [0, 1, 2, 3, 4, 5]
list_d.clear()
list_d
[] # -> 요소가 모두 제거됨
리스트 정렬하기: sort() (*기본 오름차순 정렬)
list_e = 52, 273, 103, 32, 275, 1, 7]
list_e.sort() # 오름차순 정렬
list_e
[1, 7, 32, 52, 273, 275]
list_e.sort(reverse=True) # 내림차순 정렬
liest_e
[275, 273, 103, 52, 32, 7, 1]
리스트 내부에 있는지 확인하기: in/not 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
# not 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 ib list_a
False
for 반복문: 리스트와 함께 사용하기
- 반복할 수 있는 것: 문자열, 리스트, 딕셔너리, 범위 등
# 리스트를 선언합니다.
array = [273, 32, 103, 57, 52]
# 리스트에 반복문을 적용합니다.
for element in array:
# 출력합니다.
print(element)
# 결과값
273
32
103
57
52
# for 반복문을 문자열과 함께 사용
for character in "안녕하세요":
print("-", character)
# 결과값
- 안
- 녕
- 하
- 세
- 요
중첩 리스트와 중첩 반복문
- 중첩 반복문: 반복문을 여러 겹 중첩해 사용(-n차원 처리 할 때 사용)
- 1차원 리스트: [1, 2, 3]
- 2차원 리스트: [[1, 2, 3], [4, 5, 6]]
list_of_list = [
[1, 2, 3],
[4, 5, 6, 7],
[8, 9]
]
for items in list_of_list:
for item in items:
print(items)
# 결과값
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]
[4, 5, 6, 7]
[4, 5, 6, 7]
[4, 5, 6, 7]
[4, 5, 6, 7]
[8, 9]
[8, 9]
전개 연산자
: 리스트 앞에 * 기호를 사용하여 리스트 요소를 전개
- 리스트 내부에 사용하는 경우
- 함수 매개변수 위치에 사용하는 경우
# 리스트 내부에 사용하는 경우
a = [1, 2, 3, 4]
b = [*a, *a]
b
[1, 2, 3, 4, 1, 2, 3, 4]
# append() 함수를 사용하는 경우
a = [1, 2, 3, 4]
a.append(5)
a
[1, 2, 3, 4, 5] # -> 내용이 변경됨
# 전개 연산자를 사용한 경우
b = [1, 2, 3, 4]
c = [*b, 5]
b
[1, 2, 3, 4] # -> 내용에는 어떠한 영향도 없음
c
[1, 2, 3, 4, 5] # -> 새로운 리스트 c가 만들어짐
# 함수 매개변수 위치에 사용하는 경우
a = [1, 2, 3, 4]
print(*a)
1 2 3 4
딕셔너리와 반복문
자료형 | 의미 | 가리키는 위치 |
선언 형식 | 사용 예 | 틀린 예 |
리스트 | 인덱스를 기반으로 값을 저장 | 인덱스 | 변수 = [] | list_a[1] | |
딕셔너리 | 키를 기반으로 값을 저장 | 키 | 변수 = {} | dict_a["name"] | dict_a{"name"} |
딕서녀리 선언하기
(*키를 문자열로 사용 시, '따옴표' 필수!)
# 딕셔너리 선언하기
idct_a = {
"name": "어벤져스 엔드게임",
"type": "히어로 무비"
}
# 딕셔너리의 요소에 접근하기
# !딕셔너리 선언 시에는 중괄호{} 사용하지만, 요소에 접근 할 때에는 대괄호[] 사용
dic_a
{'name': '어벤져스 엔드게임', 'type': '히어로 무비'}
dict_a["name"]
'어벤져스 엔드게임'
dict_a["type"]
'히어로 무비'
# 딕셔너리 내부 값에 문자열, 숫자, 불 등 다양한 자료를 넣을 수 있음
idct_b = {
"director": ["안소니 루소", "조 루소"],
"cast": ["아이언맨", "타노스", "토르", "닥터스트레인지", "헐크"]
}
# 딕셔너리 요소 접근
# 딕셔너리를 선언합니다.
dictionary = {
"name": "7D 건조 망고",
"type": "당절임",
"ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
"origin": "필리핀"
}
# 출력합니다.
print("name:", dictionary["name"])
print("type:", dictionary["type"])
print("ingredient:", dictionary["ingredient"])
print("origin:", dictionary["origin"])
print()
# 값을 변경합니다.
dictionary["name"] = "8D 건조 망고"
print("name:", dictionary["name"])
# 출력값
name: 7D 건조 망고
type: 당절임
ingredient: ['망고', '설탕', '메타중아황산나트륨', '치자황색소']
origin: 필리핀
name: 8D 건조 망고
# 인덱스를 지정하여 리스트 안의 특정값을 출력할 수 있음
dictionary["ingredient"]
['망고', '설탕', '메타중아황산나트륨', '치자황색소']
dictionary["ingredient"][1]
'설탕'
딕셔너리에 값 추가/제거 하기
# 딕셔너리 값 추가하기
dictionary["price"] = 5000
# 이미 존재하고 있는 키를 지정하여 값 넣을 시, 대치됨
dictionary["name"] = "8D 건조 파인애플"
# 딕셔너리 요소 제거
del dictionary["ingredient"]
! KeyError 예외: 딕셔너리에 존재하지 않는 키에 접근하면 KeyError 발생함
리스트는 '인덱스' 기반으로 값을 저장하므로 IndexError, 딕셔너리는 '키'를 기반으로 값을 저장하므로 KeyError가 발생(*값 제거시에도 동일)
딕셔너리 내부에 키 여부 확인
- in 키워드
- get() 함수
# in 키워드
# 딕셔너리를 선언합니다.
dictionary = {
"name": "7D 건조 망고",
"type": "당절임",
"ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
"origin": "필리핀"
}
# 사용자로부터 입력을 받습니다.
key = input("> 접근하고자 하는 키: ")
# 출력합니다.
if key in dictionary:
print(dictionary[key])
else:
print("존재하지 않는 키에 접근하고 있습니다.")
# get() 함수 -> 존재하지 않는 키에 접근할 경우 KeyError를 발생시키지 않고 None을 출력함
# 딕셔너리를 선언합니다.
dictionary = {
"name": "7D 건조 망고",
"type": "당절임",
"ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
"origin": "필리핀"
}
# 존재하지 않는 키에 접근해 봅니다.
value = dictionary.get("존재하지 않는 키")
print("값:", value)
# None 확인 방법
if value == None:
print("존재하지 않는 키에 접근했었습니다.") # -> None과 같은지 확인
# 출력값
값: None
존재하지 않는 키에 접근했었습니다.
for 반복문: 딕셔너리와 함께 사용하기 (*딕셔너리 내부의 키가 변수에 들어감)
# 딕셔너리를 선언합니다.
dictionary = {
"name": "7D 건조 망고",
"type": "당절임",
"ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
"origin": "필리핀"
}
# for 반복문을 사용합니다.
for key in dictionary:
# 출력합니다.
print(key, ":", dictionary[key])
# 출력값
name : 7D 건조 망고
type : 당절임
ingredient : ['망고', '설탕', '메타중아황산나트륨', '치자황색소']
origin : 필리핀
범위 자료형과 while 반복문
범위: 정수로 이루어진 범위를 만들 때 range() 함수 사용
# 매개변수에 숫자를 한 개 넣는 방법
a = range(5) # 0부터 5-1 까지의 정수로 범위를 생성함
# 매개변수에 숫자를 두 개 넣는 방법
range(0, 5) # 0부터 5-1 까지의 정수로 범위를 생성함
# 매개변수에 숫자를 세 개 넣는 방법
range(0, 5, 1) # 0부터 5-1까지의 정수로 범위를 만드는데, 앞뒤의 숫자가 1만큼 차이를 가짐
# list() 함수를 이용해 범위를 리스트로 변경하면 범위 내부에 어떤 값들이 해당하는지 확인
list(range(5))
[0, 1, 2, 3, 4]
list(range(0, 5))
[0, 1, 2, 3, 4]
list(range(5, 10))
[5, 6, 7, 8, 9]
list(range(0, 10, 2))
[0, 2, 4, 6, 8]
list(range(0, 10, 3))
[0, 3, 6, 9]
# 0부터 10까지의 범위 생성 시, 10을 반드시 포함해야 한다는 걸 강조하고 싶을 때
a = range(0, 10 + 1) # 11을 10+1로 표현하는 것은 강조하기 위함
list(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for 반복문: 범위와 함께 사용하기
# for 반복문과 범위를 함께 조합해서 사용합니다.
for i in range(5):
print(str(i) + " = 반복 변수")
print()
for i in range(5, 10):
print(str(i) + " = 반복 변수")
print()
for i in range(0, 10, 3):
print(str(i) + " = 반복 변수")
print()
# 결과값
0 = 반복 변수
1 = 반복 변수
2 = 반복 변수
3 = 반복 변수
4 = 반복 변수
5 = 반복 변수
6 = 반복 변수
7 = 반복 변수
8 = 반복 변수
9 = 반복 변수
0 = 반복 변수
3 = 반복 변수
6 = 반복 변수
9 = 반복 변수
for 반복문: 리스트와 범위 조합하기
# 리스트를 선언합니다.
array = [273, 32, 103, 57, 52]
# 리스트에 반복문을 적용합니다.
for i in range(len(array)):
# 출력합니다.
print("{}번째 반복: {}".format(i, array[i]))
# 결과값
0번째 반복: 273
1번째 반복: 32
2번째 반복: 103
3번째 반복: 57
4번째 반복: 52
for 반복문: 반대로 반복하기
- range() 함수의 매개변수를 세 개 사용하는 방법
- reversed() 함수를 사용하는 방법
# range() 함수의 매개변수를 세 개 사용하는 방법
# 역반복문
for i in range(4, 0 - 1, -1):
# 출력합니다.
print("현재 반복 변수: {}".format(i))
# 결과값
현재 반복 변수: 4
현재 반복 변수: 3
현재 반복 변수: 2
현재 반복 변수: 1
현재 반복 변수: 0
# reversed() 함수를 사용하는 방법
# 역반복문
for i in reversed(range(5)):
# 출력합니다.
print("현재 반복 변수: {}".format(i))
# 결과값
현재 반복 변수: 4
현재 반복 변수: 3
현재 반복 변수: 2
현재 반복 변수: 1
현재 반복 변수: 0
중첩 반복문으로 피라미드 만들기
output = ""
for i in range(1, 10):
for j in range(0, i):
output += "*"
output += "\n"
print(output)
# 결과값
*
**
***
****
*****
******
*******
********
*********
output = ""
for i in range(1, 15):
for j in range(14, i, -1):
output += ' '
for k in range(0, 2 * i -1):
output += '*'
output += '\n'
print(output)
# 결과값
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
***********************
*************************
***************************
while 반복문 (*조건이 중요)
# 기본적인 형태
while 불 표현식:
문장
for 반복문처럼 사용하기
# 반복 변수를 기반으로 반복하기
i = 0
while i < 10:
print("{}번째 반복입니다.".format(i))
i += 1
while 반복문: 상태를 기반으로 반복하기
# 해당하는 값 모두 제거하기
# 변수를 선언합니다.
list_test = [1, 2, 1, 2]
value = 2
# list_test 내부에 value가 있다면 반복
while value in list_test:
list_test.remove(value)
# 출력합니다.
print(list_test)
# 출력값
[1, 1]
while 반복문: 시간을 기반으로 반복하기 (*시간을 기반으로 조건 시, while 반복문 활용)
*유닉스 타임: 세계 표준시(UTC)로 1970년 1월 1일 0시 0분 0초를 기준으로 몇 초가 지났는지를 정수로 나타낸 것
# 시간과 관련된 기능을 가져옵니다.
import time
# 변수를 선언합니다.
number = 0
# 5초 동안 반복합니다.
target_tick = time.time() + 5
while time.time() < target_tick:
number += 1
# 출력합니다.
print("5초 동안 {}번 반복했습니다.".format(number))
while 반복문: break 키워드 / continue 키워드
- break: 반복문 벗어날 때
- continue: 현재 반복 생략 후, 다음 반복으로 넘어갈 때
# 변수를 선언합니다.
i = 0
# 무한 반복합니다.
while True:
# 몇 번째 반복인지 출력합니다.
print("{}번째 반복문입니다.".format(i))
i = i + 1
# 반복을 종료합니다.
input_text = input("> 종료하시겠습니까?(y/n): ")
if input_text in ["y", "Y"]:
print("반복을 종료합니다.")
break
# 출력값
0번째 반복문입니다.
> 종료하시겠습니까?(y/n): n
1번째 반복문입니다.
> 종료하시겠습니까?(y/n): n
2번째 반복문입니다.
> 종료하시겠습니까?(y/n): n
3번째 반복문입니다.
> 종료하시겠습니까?(y/n): y
반복을 종료합니다.
문자열, 리스트, 딕셔너리와 관련된 기본 함수
- 리스트에 적용할 수 있는 기본 함수: min(), max(), sum()
- 리스트 뒤집기: reversed()
- 현재 인덱스가 몇 번째인지 확인하기: enumerate()
- enumerat() 함수 사용 시, for와 in 사이에 반복 변수를 두 개 넣을 수 있음
- 딕셔너리로 쉽게 반복문 작성하기: items()
- 리스트 안에 for문 사용하기: 리스트 내포