티스토리 뷰
학습목표
이 장의 목표는 파이썬 리스트의 생성, 인덱싱, 연산, 메서드, 슬라이싱, 반복문 활용법을 익혀 여러 데이터를 효율적으로 관리하고 처리하는 능력을 기르는 것이다.
리스트란?
- 리스트는 대괄호([]) 안에 쉼표로 구분된 값들의 모음으로 표현
- my_list = [1, 2, 3, 4, 5]
- 리스트는 다양한 데이터 유형을 포함할 수 있다.(문자열, 정수, 실수, 다른 리스트, 딕셔너리 등)
- mixed_list = [1, 'apple', 3.14, [1, 2, 3], {'key': 'value'}]
- 리스트는 변경 가능
- 항목 수정: my_list[1] = 10
- 항목 추가: my_list.append(6)
- 항목 삭제: del my_list[2] 또는 my_list.remove(3)
- 인덱싱 및 슬라이싱: 리스트의 항목은 0부터 시작하는 인덱스를 사용
- 인덱싱: my_list[0] (첫 번째 항목)
- 슬라이싱: my_list[1:3] (인덱스 1부터 2까지의 항목)
- 길이: len() 함수를 사용하여 리스트의 길이(항목 수)를 얻을 수 있음
- 중첩: 리스트 내부에 또 다른 리스트를 포함시킬 수 있음.
- nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- 메서드: 리스트는 여러 가지 유용한 메서드를 포함.
1. 리스트 생성
fruits = ['apple', 'banana', 'cherry']
numbers = [1, 2, 3, 4, 5]
mixed = [1, 'apple', True, 3.14]
- 대괄호 []를 사용한다.
- 문자열, 숫자, 불리언 등 자료형 혼합 가능하다.
- 비어 있는 리스트는 empty = [] 또는 empty = list()로 만든다.
#빈 리스트에서는 특정 인덱스에 직접 값을 할당할 수 없으며, append 메서드를 사용하여 값을 추가해야 한다.
list3 = []
list3.append(1)
list3.append(2)
list3.append(3)
print(list3)
2. 리스트 indexing
fruits = ['apple', 'banana', 'cherry']
print(fruits[0]) # 'apple' (첫 번째)
print(fruits[-1]) # 'cherry' (마지막)
✅ 인덱스는 0부터 시작한다.
✅ 음수 인덱스는 뒤에서부터 센다.
list2 = [10,20,30,40]
list2[0]
list2[0] + list2[3]
50
3. 리스트 조작하기 (메서드)
- append() : 리스트의 끝에 새로운 항목을 추가
- extend() : 한 리스트의 모든 항목을 다른 리스트의 끝에 추가
- insert() : 지정된 위치에 항목을 삽입
- remove() : 리스트에서 첫 번째로 발견된 지정된 값의 항목을 삭제
- pop() : 지정된 인덱스의 항목을 삭제하고, 그 항목을 반환
- index() : 지정된 값의 첫 번째 항목의 인덱스를 반환
- count() :리스트에서 지정된 값의 항목의 수를 반환
- sort() : 리스트의 항목을 오름차순으로 정렬합니다. reverse=True 인자를 사용하여 내림차순으로 정렬
- reverse() : 리스트의 항목 순서를 반대로 바꿈
#append()
list1 = [1, 2, 3]
list1.append(4)
list1
# 결과: list1 = [1, 2, 3, 4]
list1 = [1, 2, 3]
list2 = [4, 5]
list1.extend(list2)
# 결과: list1 = [1, 2, 3, 4, 5]
list1 = [1, 2, 4]
list1.insert(2, 3) # 2번 인덱스에 3을 삽입
# 결과: list1 = [1, 2, 3, 4]
list1 = [1, 2, 3, 2]
list1.remove(2)
# 결과: list1 = [1, 3, 2]
#pop지정된 인덱스의 항목을 삭제하고, 그 항목을 반환
list1 = [1,2,3,4]
a = list1.pop(2)
print(list1)
print(a)
b = list1.remove(4)
print(b)
print(list1)
결과
[1, 2, 4]
3
None
[1, 2]
list1 = [1, 2, 3, 2]
idx = list1.index(2)
# 결과: idx = 1
list1 = [1, 2, 3, 2, 2,2,2,]
list1.count(2)
# 결과: count_2 = 2
#sort() : 리스트의 항목을 오름차순으로 정렬합니다. reverse=True 인자를 사용하여 내림차순으로 정렬
list1 = [3, 1, 4, 2]
list1.sort()
# 결과: list1 = [1, 2, 3, 4]
#reverse() : 리스트의 항목 순서를 반대로 바꿈
list1 = [1, 2, 3, 4]
list1.reverse()
# 결과: list1 = [4, 3, 2, 1]
연습문제
1.리스트 길이 알아내기
- 리스트의 길이는 리스트가 저장하고 있는 항목의 개수
- len() 함수 사용
numbers =[1,2,3,4,5,6]
len(numbers)
2.리스트 내부에 있는지 확인하기
numbers = [1,2,3,4,5,6]
7 in numbers
#False
mylist = ['우유','사과','두부','소고기']
for item in mylist:
print(item)
# 우유
# 사과
# 두부
# 소고기
mylist = ['우유','사과','두부','소고기']
print(len(mylist))
for i in range(len(mylist)):
print(mylist[i])
# 4
# 우유
# 사과
# 두부
# 소고기
3.리스트를 정렬 해 봅시다.
- sort()
- sorted()
numbers=[9,6,7,1,8,4,5,3,2]
numbers.sort()
print(numbers)
numbers=[9,6,7,1,8,4,5,3,2]
new = sorted(numbers)
print(new)
4.리스트을 저장하고 항목의 평균을 계산 해 보자
- 사용자로부터 5개의 숫자를 읽어서 리스트에 저장하고 숫자들의 평균을 계산하여 출력
alist = [] # 빈 리스트 생성
sum = 0 # 합계를 저장할 변수 초기화
for i in range(3): # 3번 반복
i = int(input('점수입력:')) # 점수를 입력받아 정수로 변환
alist.append(i) # 리스트에 추가
for i in alist: # 리스트의 각 값에 대해
sum += i # sum에 더함
avg = sum / len(alist) # 평균 계산
# 출력 1: 기본 print
print('합은', sum, '평균은', avg)
# 출력 2: % 포맷팅
print('합은 %s이고 평균은 %d' %(sum, avg))
# 출력 3: format 메서드
print('합은 {}이고, 평균은{}이다'.format(sum, avg))
# 출력 4: f-string (소수점 2자리)
print(f'합은 {sum}이고, 평균은 {avg:0.2f}이다.')
✅ alist.append(i) → 입력받은 값을 리스트에 넣는다.
✅ sum += i → 리스트 값을 하나씩 더한다.
✅ avg = sum / len(alist) → 리스트 길이로 평균을 계산한다.
✅ 출력 형식을 다르게 표현해 포맷팅 방식 비교 학습이 가능하다.
5.리스트 조작
- 다음과 같이 문자열로 구성된 리스트를 생성하세요: ["apple", "banana", "cherry", "date", "elderberry"].
- 반복문을 사용하여 리스트의 각 문자열의 길이를 계산하고, 각 문자열과 해당 길이를 함께 출력하세요.
apple: 5
banana: 6
cherry: 6
date: 4
elderberry: 10
fruits = ["apple", "banana", "cherry", "date", "elderberry"]
for fruit in fruits:
length = len(fruit)
print('{}:{} 글자'.format(fruit, length)) # format() 사용
# 또는
# print(f'{fruit}:{length} 글자') # f-string 사용
✅ format() 방식 → 문자열 안에 {}를 넣고 .format()으로 값 채우기
✅ f-string 방식 → 문자열 앞에 f를 붙이고 {} 안에 변수 직접 넣기
6.팩토리얼 계산
- 팩토리얼은 수학에서 사용되는 연산으로, 주어진 자연수 𝑛 n의 모든 양의 정수들의 곱을 의미
- 사용자로부터 양의 정수 n을 입력 받으세요.
- 1부터 n까지의 모든 정수를 곱하여 n의 팩토리얼을 계산하고 출력하세요. (예: 5! = 1 * 2 * 3 * 4 * 5)
n = int(input('양의 정수를 입력하세요: '))
factorial = 1
for i in range(1, n + 1):
factorial *= i
print(f'{n}! = {factorial}')
✅ n = int(input(...)) → 사용자로부터 정수 입력받기
✅ factorial = 1 → 곱셈 결과를 담을 변수 초기화
✅ for i in range(1, n + 1): → 1부터 n까지 반복
✅ factorial *= i → 각 i를 누적 곱
✅ print(f'{n}! = {factorial}') → 최종 결과 출력
종합문제
1.퀴즈내기
주어진 코드는 두 개의 무한 루프를 사용하여 사용자로부터 입력을 받고, 정해진 조건을 만족하면 루프를 종료하는 예제입니다.
아무리 위를 봐도 보이지 않는 천장은 : 천장
아무리 위를 봐도 보이지 않는 천장은 : 입천장
꽃가게 주인이 가장 싫어하는 도시는 : 시드니
축하합니다.
while True:
a = input("아무리 위를 봐도 보이지 않는 천장은 : ")
if a == "입천장":
break
while True:
a = input("꽃가게 주인이 가장 싫어하는 도시는 : ")
if a == "시드니":
break
print("축하합니다.")
1️⃣ 첫 번째 while 루프
→ 질문: 아무리 위를 봐도 보이지 않는 천장은?
→ 정답: 입천장 (입 안에 있어서 고개를 들어도 안 보임)
→ 정답을 맞출 때까지 반복
2️⃣ 두 번째 while 루프
→ 질문: 꽃가게 주인이 가장 싫어하는 도시는?
→ 정답: 시드니 (씨드니 = 씨앗이 다 시드는 곳)
→ 정답을 맞출 때까지 반복
3️⃣ 두 문제를 모두 맞히면
→ print("축하합니다.") 출력
2.종료조건지정
마지막 숫자는 : 4
뛰어넘을 숫자는 : 3
0
1
2
4
주어진 코드는 사용자로부터 두 개의 숫자를 입력받아, 0부터 첫 번째 숫자까지의 범위에서 두 번째 숫자를 뛰어넘고 출력하는 예제입니다. continue 문을 사용하여 특정 숫자를 뛰어넘고 나머지 숫자들을 출력합니다.
a = int(input("마지막 숫자는: "))
b = int(input("뛰어넘을 숫자는: "))
for i in range(a + 1):
if i == b:
continue
print(i)
1️⃣ 입력
- a: 출력할 마지막 숫자
- b: 출력에서 건너뛸 숫자
2️⃣ for 반복문
- range(a + 1) → 0부터 a까지 반복
3️⃣ 조건
- if i == b: → 현재 숫자가 b이면 continue (출력하지 않고 다음 반복으로 넘어감)
3.업다운게임
- 숫자 하나를 정하고 그 숫자를 입력할 때까지 프로그램 반복
import random
answer = random.randint(1, 100) # 1~100 사이 난수 생성
while True:
guess = int(input("숫자를 맞혀보세요 (1~100): "))
if guess < answer:
print("업!")
elif guess > answer:
print("다운!")
else:
print("정답입니다!")
break
✅ random.randint(1, 100) → 1~100 사이의 랜덤 숫자 선택
✅ while True: → 무한 반복
✅ if-elif-else → 입력한 숫자가 작으면 "업!", 크면 "다운!", 같으면 "정답!"
업다운 게임 (시도 횟수 + 범위 안내 추가)
import random
answer = random.randint(1, 100) # 1~100 사이 난수 생성
tries = 0 # 시도 횟수
min_num = 1
max_num = 100
print(f"{min_num}부터 {max_num} 사이의 숫자를 맞혀보세요!")
while True:
guess = int(input(f"숫자를 입력하세요 ({min_num}~{max_num}): "))
tries += 1
if guess < min_num or guess > max_num:
print("범위를 벗어난 숫자입니다. 다시 입력하세요.")
continue
if guess < answer:
print("업!")
min_num = guess + 1 # 최소값 업데이트
elif guess > answer:
print("다운!")
max_num = guess - 1 # 최대값 업데이트
else:
print(f"정답입니다! {tries}번 만에 맞혔습니다!")
break
✅ 시도 횟수 → tries 변수로 몇 번 시도했는지 기록
✅ 범위 제한 → 현재 최소값(min_num), 최대값(max_num)을 안내하고 벗어나면 경고
✅ 범위 업데이트 → 업/다운할 때 최소값·최대값을 좁혀서 안내
- Total
- Today
- Yesterday