2025년 11월 3일 월요일
오후 8:54
리스트(List) 자료형
공간과 값은 일대일 대응이다.
리스트는 여러 개의 값을 담는다.
리스트는 여러 개의 값을 담을 수 있는 자료형, []로 표현 원소마다 , 로 구분
Empty_list = [] # 빈 리스트 정의
Mix_list = ["a", 2, False, 27.15] # 다양한 자료형의 원소를 하나의 리스트에 담을수 있다.
시퀀스 자료형
순서가 있음, 여러 원소들을 담음
문자열, 리스트, 튜플이 있다.
인덱스: 시퀀스 자료형의 각 원소의 위치를 인덱스라 표현한다.
0,1,2,3,4 이렇게 증가
문자열도 순서가 있음 하나의 글자가 하나의 원소라 보면 된다.
공백조차도 문자열 취급
인덱스를 알면 문자열,원소에 접근 가능, 이런걸 보고 인덱싱이라 함
인덱싱: 인덱스를 바탕으로 해당 위치에 접근하는 기법
문자열/리스트[인덱스_번호]
num_list = [10, 20, 30, 40, 50]
print(num_list[2])
30
str_var = "Python"
print(str_var[3])
h
인덱스를 초과하는 범위를 넣으면
print(num_list[5])
IndexError: list index out of range
Index out of range 에러 발생한다.
인덱싱: 값 수정
인덱스(index)를 바탕으로 해당 위치에 접근하는 기법
리스트[인덱스_번호] = 값
문자열은 수정이 불가능 하다 Immutable 타입이라서
슬라이싱(Slicing)
인덱스(index) 범위를 통해 연속된 범위의 일부분을 가져오는 기법
문자열/리스트[시작_인덱스 : 끝 인덱스] 끝 범위의 인덱스는 포함하지 않음!
num_list = [1, 2, 3, 4, 5]
print(Num_list[1:4])
1부터 4미만의 원소 가져오기
Str_var = "Hi! Python"
Print(str_var[0:3])
0부터 3미만의 원소 가져오기
인덱싱(Indexing)과 슬라이싱(Slicing)확장
시작과 끝 범위를 비울 수 있다 = 안 쓴다는 뜻
음수의 인덱싱 a[-1] 뒤에서 첫번째
a = "Hello World"
b = [4, 5, 3, 2, 1]
print(a[-2:])
ld
print(b[1:-3])
[5]
In 연산자
시퀀스 자료형 안에 해당 원소가 포함되어있는지 검사하는 연산자
Sentence = "Hello World"
Num_list = [1,3,5,7,9]
대문자 "E"가 문장안에 포함되어있는지?
Print("E" in sentence)
False
3이라는 원소가 리스트 안에 포함되어 있는지?
Print(3 in num_list)
True
str_var = "Dada dd ad"
print('Dad' in str_var)
print('DaD' in str_var)
True
False
list1 = [10, 4, 7, 6, 1, 2]
print(2 in list1)
True
print([10, 4] in list1)
이렇게 뭉탱이 여러 개를 검사가 안됨
리스트 안에 또 다른 리스트 [10, 4]가 있어야 검사 가능
len 시퀀스 자료형의 길이(length)를 구하는 함수 (= 총 원소의 개수)
num_list = [1,2,3,4,5]
word = "Python"
print(len(num_list))
5
print(len(word))
6
len - 1 = 마지막 인덱스
중첩 리스트
리스트 내의 원소가 리스트인 구조 (2차원 리스트)
nested = [[1,2,3], [4,5,6], [7,8,9]]
print(len(nested))
3
전체 nested 길이 nested[0], nested[1], nested[2]이므로 3이나옴
print(len(nested[0]))
3
nested[0]원소가 1, 2, 3세개이므로 3개가 나옴
print(nested[0][1])
2
1, 2, 3 중 두번째 거
print(nested[1][2])
6
4, 5, 6 중 세번째거
리스트의 다양한 메서드
• .append(x)
현재 리스트에 원소 x를 가장 마지막에 추가
a = [4, 3, 2, 5, 1]
a.append(100)
print(a)
[4, 3, 2, 5, 1, 100]
a.append([3,4,5])
print(a)
[4, 3, 2, 5, 1, [3, 4, 5]]
b = ['p', 'y', 't']
b.append('h')
b.append('o')
b.append('n')
print(b)
['p', 'y', 't', 'h', 'o', 'n']
• .insert(i,x)
현재 리스트에 i번째 인덱스에 원소 x를 추가(삽입
a = [1, 2, 4, 5]
a.insert(2, 3)
print(a)
[1, 2, 3, 4, 5]
2번째 인덱스에 3을 삽입한다.
a = [4, 3, 2, 5, 1]
a.append([3,4,5])
print(a)
a[-1].insert(0,2)
print(a)
[4, 3, 2, 5, 1, [3, 4, 5]]
[4, 3, 2, 5, 1, [2, 3, 4, 5]]
이렇게 결과가 나옴 a[-1] 즉 마지막 원소(리스트)에 첫번째 인덱스에 2를 넣는다는 뜻.
• .remove(x)
현재 리스트에서 처음 검색된 원소 x를 삭제
• 앞에서부터 일치하는 값 검색 후, 처음 검색된 값을 삭제
num_list.remove(3) 맨앞의 3이라는 원소를 삭제 한다.
딱 하나의 값만 삭제, 처음 검색 되는 값을 삭제
없는 값 삭제하면 에러 뜸
a.remove(3)
print(a)
[4, 2, 5, 1, [2, 3, 4, 5]]이 나오게 됨
a.remove(x)
NameError: name 'x' is not defined
없는 값을 인자로 넣어서 에러가 뜸
• .pop(i)
현재 리스트에서 i번째 인덱스의 원소를 삭제후, 반환(= 원소 빼내기)
인자에 아무 것도 넣지 않으면 Default로 마지막 원소를 대상으로 수행
num_list = [1, 2, 3, 4, 5]
print(num_list.pop(1))
print(num_list)
print(num_list.pop(1))
print(num_list)
print(num_list.pop(2))
print(num_list)
2
[1, 3, 4, 5]
3
[1, 4, 5]
5
[1, 4]
• .index(x)
현재 리스트에서 원소 x에 해당하는 인덱스 검색
• 앞에서부터 일치하는 값 검색 후, 처음 검색된 위치(인덱스)를 반환
num_list = [3, 1, 4, 1, 2]
print(num_list.index(4))
2
1을입력시에 1이 나옴 맨 앞의 1 인덱스를 반환하기에
print(num_list.index(10))
리스트에 없는 값 입력시에 에러가 뜸
ValueError: 10 is not in list
• .count(x)
현재 리스트에서 원소 x의 개수를 반환
a = ["a", "b", "a", "A", "c", "d", "b"]
print(a.count("a"))
2
print(a.count("b"))
2
print(a.count("B"))
0 이렇게 대소문자도 구문한다 대문자 B일때 0으로 뜨는 모습
num_list = [3, 1, 4, 1, 2, 1, 3]
print(num_list.count(1))
print(num_list.count(3))
• .sort()
현재 리스트의 원소들을 내부적으로 정렬
• Default는 오름차순 정렬. reverse 매개변수에 True 전달 시, 내림차순 정렬
num_list = [4, 2, 3, 1, 5]
num_list.sort()
print(num_list)
[1, 2, 3, 4, 5]
오름차순 정렬된 모습
num_list.sort(reverse=True)
print(num_list)
[5, 4, 3, 2, 1]
숫자열 뿐만 아니라 문자열도 정렬 가능하다.
a = ["a", "b", "a", "A", "c", "d", "b"]
a.sort()
print(a)
a.sort(reverse=True)
print(a)
['A', 'a', 'a', 'b', 'b', 'c', 'd']
['d', 'c', 'b', 'b', 'a', 'a', 'A']
대문자 A가 맨앞에 정렬 아스키 코드상 A=65 a=97이기에
• .clear()
현재 리스트의 모든 원소들을 내부적으로 제거하는 기능(= 빈 리스트로 만드는 기능)
b.clear()
print(b)
[]
리스트가 비워진 모습
조건문
분기처리를 할때 사용한다.
회원가입 로그인이라던가
만약에 특정 조건이 참(True)이라면 명령을 실행
If 조건:
<수행할 명령1>
<수행할 명령2>
...
검사할 조건, if문 정의의 마무리를 의미하는 :, 들여쓰기, 분기 처리 명령
결론 은 들여쓰기가 가장 중요함
If문이 종속되어있느냐 아니냐
들여쓰기 된게 if문 종속 아닌게 종속 안됨
들여쓰기 (Indentation)
파이썬에서는 공백도 일종의 문법이다
if/else/for/while 등등 블럭의 들여쓰기는 공백 4칸 또는 탭 1칸을 의미한다!
var1 = 0
if var1 > 0:
print(var1, "양수입니다.")
아무것도 출력 안된다. 0이니까 조건문 조건에 거짓이 된다.
var1 = 1
if var1 > 0:
print(var1, "양수입니다.")
이렇게 되면 if문 안의 내용이 출력 된다.
radius = int(input("반지름을 입력하세요: "))
if radius > 0:
print('넓이 = ', (3.14 * radius ** 2))
print('둘레 = ', (2 * 3.14 * radius))
반지름을 입력하세요: 3
넓이 = 28.26
둘레 = 18.84
num = int(input('정수를 입력하세요: '))
if num % 2 == 0:
print(num, '은 짝수입니다.')
정수를 입력하세요: 4
4 은 짝수입니다.
if else 문
조건이 참인 경우 if에 종속된 경우 실행
조건이 거짓인 경우 else에 종속된 경우 실행
만약에 조건이 참이면 A 실행, 그렇지 않으면 B 실행
if 조건:
print('A')
else:
print('B')
Else는 if조건문의 정반대라 보면된다.
If num % 2 == 0:
Else -> num % 2 != 0라 보면된다.
if num % 2 == 0:
print(num, '은 짝수입니다.')
else:
print(num, '은 홀수입니다.')
if elif else 문
그렇지 않고 ~라면 라고 해석 가능
그렇지 않고, 그 이상의 여러 개의 조건을 걸고 싶을 때는? → if-elif-else 문
Elif는 한 개가 아니라 여러개 가능
상위의 조건들이 False 인 경우, 또 다른 조건을 거는 것
각각 등급마다 동작을 다르게 할때
if부터 차례대로 조건을 하나씩 검사 조건들 중 하나만 참이어도, 해당 명령 실행 후, if-elif-else 종료
if grade == 'A':
print('A등급입니다.')
elif grade == 'B':
print('B등급입니다.')
elif grade == 'C':
print('C등급입니다.')
elif grade == 'D':
print('D등급입니다.')
else:
print('F등급입니다.')
input, f-string 활용
grade = input("등급을 A~F입력하세요: ")
if grade == 'A':
print(f'{grade}등급입니다.')
elif grade == 'B':
print(f'{grade}등급입니다.')
elif grade == 'C':
print(f'{grade}등급입니다.')
elif grade == 'D':
print(f'{grade}등급입니다.')
else:
print(f'F등급입니다.')
중첩 if문 (Nested if
이렇게 세부적으로 걸면..
Num1>0크면서 num2>0보다 클 경우 이렇게 된다.
안쪽으로 안쪽으로 점점 디테일하게 조건문을 거는 것.
num1 = 10
num2 = -10
if num1 > 0:
if num2 > 0:
print('둘다 양수입니다.')
elif num2 < 0:
print('num1은 양수, num2은 음수입니다.')
elif num1 < 0:
if num2 > 0:
print('num1은 음수, num2은 양수입니다.')
elif num2 < 0:
print('둘다 음수입니다.')
비교 연산자 체이닝
비교 연산자를 한 줄에 이어서 쓸 수 있는 기능
①num이 10이상이면서, 90이하
②num은 10부터 90이하
도 and 문으로 엮어서 표현 가능
Example 1
a = ["H", "h", "e", "l", "l", "o"]
if "H" in a:
a.remove("H")
else:
print("H가 없습니다.")
print(a)
['h', 'e', 'l', 'l', 'o']
A라는 리스트에 "H"가 있다면 "H" 제거
아닐시에 "H가 없습니다." 출력
말로 코드를 코드를 말로 표현 해보기 그래야 실력는다.
word = "Python"
if len(word) >= 5:
print(word * 2)
else:
print(word)
글자 길이가 5이상일때 두번 출력
아닐시 한번만 출력
word = input("단어를 입력하세요: ")
if len(word) >= 5 and 'P' in word:
print(word)
else:
print('조건에 맞지 않는 단어입니다.')
문자열 길이가 5이상이고 P가 포함되어있을 때 문자열 출력
아닐시에 '조건에 맞지 않는 단어입니다'출력
score = int(input("시험 점수를 입력하세요: "))
attendance = int(input("출석 점수를 입력하세요: "))
if score >= 70 and attendance >= 90:
print("통과")
elif score >= 70 and attendance < 90:
print("조건부 통과(출석 미달)")
else:
print("미흡")
시험점수 70점이상이고, 출석점수가 90점이상일때 "통과" 출력
시험점수 70점이상이고, 출석점수가 90점미만일때 "조건부 통과(출석 미달)" 출력
그외에 "미흡"출력
2번문제
문제 설명:
빈 리스트를 만들고, 사용자로부터 할 일을 5개 입력받아 리스트에 추가하세요.
그 후 사용자에게 완료한 할 일의 번호(1부터 시작)를 입력받아 해당 항목을 삭제하고, 남은 할 일 목록과 개수를 출력하세요.
입력 예시:
빨래하기
설거지하기
공부하기
운동하기
청소하기
3
출력 예시:
전체 할 일: ['빨래하기', '설거지하기', '공부하기', '운동하기', '청소하기']
'공부하기'를 완료했습니다!
남은 할 일: ['빨래하기', '설거지하기', '운동하기', '청소하기']
남은 개수: 4개
내가 한 풀이
# 빈 리스트를 만드세요
works = []
# 할 일을 5개 입력 받고, 리스트에 추가하세요.
for i in range(0,5):
work1 = input("할일 5개 입력하세요: ")
works.append(work1)
print("전체 할 일:", works)
print(f"전체 할일: {works}")
# 사용자에게 완료할 할 일의 번호를 입력받고, 번호 해당하는 할일을 삭제하세요.
number = int(input("할 일의 번호를 입력하세요: "))
# works.remove(works[number - 1])#pop(number)도 가능
print(f"{works.pop(number-1)}를 완료했습니다!")
# 남은 할 일의 목록과 개수를 출력하세요.
print(f"남은 할 일: {works}, 남은 개수: {len(works)}")
For문 없이 그냥 인풋5개 입력하면 됨
works.append(input("할일 5개 입력하세요: "))
이렇게 약식으로 해도 된다. 입력과 동시에 추가
print(f"전체 할일: {works}")
f-string 활용가능
Pop은 인덱스를 기준으로 지우지만 반환도 가능하다 그래서 pop 쓸것.
print(f"{works.pop(number-1)}를 완료했습니다!")
이렇게 하면 pop과 동시에 출력가능
print("남은 할 일:", works, "남은 개수: ", len(works)) # 이것도 f-string 사용가능
9번문제
문제 설명:
물건의 무게(kg)와 배송 지역(서울/지방/제주)을 입력받아 배송비를 계산하세요.
입력 예시:
5
지방
출력 예시:
배송 지역: 지방
무게: 5kg
배송비: 7000원
(설명: 기본 4000원에 초과 2kg에 의한 추가 3000원)
내가 한 풀이
kg = int(input("kg을 입력하세요.: "))
area = input("지역을 입력하세요: ")
money = 0
if area == "서울" and kg <= 3:
money = 3000
elif area == "서울" and kg > 3:
money = 3000 + (1000 * (kg - 3))
if area == "지방" and kg <= 3:
money = 4000
elif area == "지방" and kg > 3:
money = 4000 + (1500 * (kg - 3))
if area == "제주" and kg <= 3:
money = 5000
elif area == "제주" and kg > 3:
money = 5000 + (2000 * (kg - 3))
print(f"배송 지역: {area}")
print(f"무게: {kg}kg")
print(f"배송비: {money}원")
이것도 방법은 아주 다양하다 함
지역에 따른
Base_fee extra_fee 변수를 지정하는 방법도 있다고 함.
print("배송 지역: ", area)
print("무게: ", kg,"kg")
print("배송비: ", money,"원")
이것도 f-string 써보기