[Python-Compact.ver] 리스트, 시퀀스 자료형, 조건문

shlim55·2025년 11월 16일

Python

목록 보기
22/25

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번문제

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번문제

9. 택배 요금 계산기

문제 설명:

물건의 무게(kg)와 배송 지역(서울/지방/제주)을 입력받아 배송비를 계산하세요.

  • 서울: 3kg 이하 3000원, 3kg 초과 시 1kg당 1000원 추가
  • 지방: 3kg 이하 4000원, 3kg 초과 시 1kg당 1500원 추가
  • 제주: 3kg 이하 5000원, 3kg 초과 시 1kg당 2000원 추가

입력 예시:

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 써보기

profile
A Normal Programmer

0개의 댓글