Ch 05. 리스트로 데이터 모으기 [파이썬 고등 수학 정복]

Part 1: 수학 공부를 위한 파이썬 첫걸음 Chapter 5: 데이터를 모아 관리하기 (Managing Collections of Data - Lists) 학습 목표 여러 개의 데이터를 순서대로 저장하는 리스트(List)를 만들고 사용할 수...

Part 1: 수학 공부를 위한 파이썬 첫걸음

Chapter 5: 데이터를 모아 관리하기 (Managing Collections of Data - Lists)

학습 목표

  • 여러 개의 데이터를 순서대로 저장하는 리스트(List)를 만들고 사용할 수 있다.
  • 인덱싱(Indexing)을 사용하여 리스트의 특정 위치에 있는 요소에 접근할 수 있다.
  • 슬라이싱(Slicing)을 사용하여 리스트의 일부분(부분 리스트)을 추출할 수 있다.
  • 리스트의 길이를 구하는 len() 함수와 리스트에 요소를 추가하는 append() 메소드를 사용할 수 있다.
  • 숫자로 이루어진 리스트에 대해 sum(), min(), max() 함수를 사용하여 합계, 최솟값, 최댓값을 계산할 수 있다.

 

1. 데이터 묶음의 필요성: 리스트의 등장

지금까지 우리는 변수 하나에 값 하나를 저장했습니다 (radius = 5, name = "Alice"). 하지만 만약 우리 반 학생 30명의 수학 점수를 모두 저장하고 싶다면, score1, score2, ..., score30 처럼 30개의 변수를 만드는 것은 매우 비효율적입니다.

이럴 때 필요한 것이 여러 개의 데이터를 하나의 묶음으로 관리할 수 있는 자료구조입니다. 파이썬에서 가장 기본적이고 널리 사용되는 데이터 묶음이 바로 리스트(List)입니다. 리스트를 사용하면 여러 개의 값들을 순서대로 저장하고, 각 값에 쉽게 접근하거나 수정할 수 있습니다. 마치 쇼핑 목록이나 학생 명단처럼 생각할 수 있습니다.

 

2. 리스트 만들기 와 기본 구조

리스트는 대괄호 [] 안에 여러 개의 값(요소, element)들을 콤마(,)로 구분하여 넣어 만듭니다. 리스트 안에는 숫자, 문자열, 심지어 다른 리스트 등 다양한 타입의 데이터를 섞어서 넣을 수도 있습니다.

# 빈 리스트 생성
empty_list = []
print(empty_list)

# 숫자로 이루어진 리스트
scores = [85, 92, 78, 100, 95]
print(scores)

# 문자열로 이루어진 리스트
fruits = ["apple", "banana", "cherry"]
print(fruits)

# 다양한 타입을 섞은 리스트
mixed_list = [1, "Python", 3.14, True, [10, 20]] # 리스트 안에 리스트도 가능!
print(mixed_list)

실행 결과:

[]
[85, 92, 78, 100, 95]
['apple', 'banana', 'cherry']
[1, 'Python', 3.14, True, [10, 20]]

 

3. 리스트 요소에 접근하기: 인덱싱 (Indexing)

리스트에 저장된 각 요소는 고유한 위치 번호(인덱스, index)를 가집니다. 이 인덱스를 사용하여 특정 위치의 요소에 접근할 수 있습니다. 주의할 점은 파이썬의 인덱스는 0부터 시작한다는 것입니다!

리스트이름[인덱스번호]

scores = [85, 92, 78, 100, 95]
# 인덱스: 0   1   2    3    4

# 첫 번째 요소 접근 (인덱스 0)
first_score = scores[0]
print(f"첫 번째 점수: {first_score}") # 출력: 85

# 세 번째 요소 접근 (인덱스 2)
third_score = scores[2]
print(f"세 번째 점수: {third_score}") # 출력: 78

# 마지막 요소 접근 (인덱스 4 또는 음수 인덱스 -1)
last_score = scores[4]
print(f"마지막 점수 (인덱스 4): {last_score}") # 출력: 95

last_score_neg = scores[-1] # 음수 인덱스: -1은 마지막, -2는 마지막에서 두 번째...
print(f"마지막 점수 (인덱스 -1): {last_score_neg}") # 출력: 95

# 리스트 요소 값 변경하기
print(f"변경 전 scores[1]: {scores[1]}") # 92
scores[1] = 90 # 인덱스 1의 값을 90으로 변경
print(f"변경 후 scores[1]: {scores[1]}") # 90
print(f"변경된 리스트: {scores}")

만약 존재하지 않는 인덱스(예: scores[5])에 접근하려고 하면 IndexError가 발생합니다.

 

4. 리스트 잘라내기: 슬라이싱 (Slicing)

리스트의 특정 부분, 즉 부분 리스트(sub-list)를 추출하고 싶을 때 슬라이싱(Slicing)을 사용합니다. 콜론(:)을 이용하여 시작 인덱스와 끝 인덱스를 지정합니다.

리스트이름[시작인덱스 : 끝인덱스]

  • 시작인덱스의 요소부터 끝인덱스바로 앞 요소까지 포함합니다 (끝인덱스는 포함되지 않음!).
  • 시작인덱스를 생략하면 처음부터 (인덱스 0부터) 시작합니다.
  • 끝인덱스를 생략하면 마지막 요소까지 포함합니다.

리스트이름[시작인덱스 : 끝인덱스 : 간격]

  • 간격(step)을 지정하면 해당 간격만큼 건너뛰며 요소를 추출합니다.
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 인덱스: 0  1  2  3  4  5  6  7  8  9

# 인덱스 2부터 5 전까지 (2, 3, 4번 인덱스)
sub1 = numbers[2:5]
print(f"numbers[2:5] -> {sub1}") # 출력: [2, 3, 4]

# 처음부터 3 전까지 (0, 1, 2번 인덱스)
sub2 = numbers[:3]
print(f"numbers[:3] -> {sub2}") # 출력: [0, 1, 2]

# 인덱스 6부터 끝까지
sub3 = numbers[6:]
print(f"numbers[6:] -> {sub3}") # 출력: [6, 7, 8, 9]

# 처음부터 끝까지 2칸 간격으로 (짝수만)
sub4 = numbers[::2]
print(f"numbers[::2] -> {sub4}") # 출력: [0, 2, 4, 6, 8]

# 리스트 전체 복사 (슬라이싱 이용)
numbers_copy = numbers[:]
print(f"numbers[:] -> {numbers_copy}")

슬라이싱은 원본 리스트를 변경하지 않고 새로운 부분 리스트를 만들어 반환합니다.

 

5. 리스트 다루는 유용한 기능들

  • len(리스트): 리스트에 포함된 요소의 개수(길이)를 반환합니다.
  • 리스트.append(값): 리스트의 맨 뒤에 새로운 값을 추가합니다. (메소드 - 리스트 변수 뒤에 점.을 찍고 사용)
  • sum(숫자리스트): 숫자들로 이루어진 리스트의 모든 요소의 합계를 반환합니다.
  • min(숫자리스트): 숫자 리스트에서 가장 작은 값을 반환합니다.
  • max(숫자리스트): 숫자 리스트에서 가장 큰 값을 반환합니다.
  • 리스트 + 리스트: 두 리스트를 이어 붙여 새로운 리스트를 만듭니다.
  • 값 in 리스트: 특정 값이 리스트 안에 포함되어 있는지 확인하여 True 또는 False를 반환합니다.
scores = [85, 92, 78, 100, 95]

# 리스트 길이
print(f"점수 개수: {len(scores)}") # 출력: 5

# 요소 추가
scores.append(88) # 리스트 맨 뒤에 88 추가
print(f"점수 추가 후: {scores}") # 출력: [85, 92, 78, 100, 95, 88]
print(f"변경된 개수: {len(scores)}") # 출력: 6

# 합계, 최솟값, 최댓값
total_score = sum(scores)
min_score = min(scores)
max_score = max(scores)
print(f"총점: {total_score}")
print(f"최저 점수: {min_score}")
print(f"최고 점수: {max_score}")

# 평균 계산
average_score = total_score / len(scores)
print(f"평균 점수: {average_score:.2f}") # 소수점 2자리까지 출력

# 리스트 연결
list1 = [1, 2, 3]
list2 = [4, 5]
combined_list = list1 + list2
print(f"리스트 연결: {combined_list}") # 출력: [1, 2, 3, 4, 5]

# 요소 포함 여부 확인
print(f"100점이 리스트에 있나요? {100 in scores}") # True
print(f"50점이 리스트에 있나요? {50 in scores}") # False

 

6. 리스트와 반복문 (for)

for 반복문은 리스트의 각 요소를 순서대로 하나씩 꺼내어 처리하는 데 매우 유용합니다.

fruits = ["apple", "banana", "cherry"]

# 리스트의 모든 과일 이름 출력하기
print("과일 목록:")
for fruit in fruits: # fruit 변수가 'apple', 'banana', 'cherry' 순서로 값을 받음
  print(fruit)

# 점수 리스트에서 80점 이상인 점수만 출력하기
scores = [85, 92, 78, 100, 95, 88, 75]
print("\n80점 이상인 점수:")
for score in scores:
    if score >= 80:
        print(score)

수학 문제에 적용하기

리스트는 다양한 수학 데이터를 저장하고 처리하는 데 필수적입니다.

  • 데이터 집합 관리: 학생들의 점수 목록, 실험 측정값, 조사 결과 등을 리스트에 저장하여 관리합니다.
  • 통계 계산: 리스트에 저장된 데이터의 합계, 평균, 최댓값, 최솟값 등을 계산합니다. (예: 학생들 평균 키 계산)
  • 좌표 표현: 2차원 좌표 [x, y]를 리스트로 표현하고, 여러 개의 좌표들을 리스트의 리스트 [[x1, y1], [x2, y2], ...] 로 저장하여 도형 정보를 다룰 수 있습니다. (Chapter 9에서 활용)
  • 다항식 계수 표현: [3, -5, 2] 와 같이 다항식의 계수를 저장하여 다항식 계산에 활용합니다. (Chapter 7에서 활용)
  • 수열 저장: 등차수열, 등비수열 등의 항들을 계산하여 리스트에 저장하고 분석합니다. (Chapter 10에서 활용)

직접 해보기 (Follow Along Exercise)

  1. 좋아하는 숫자 5개를 포함하는 리스트 fav_numbers를 만드세요.
  2. len() 함수를 이용해 리스트의 길이를 출력하세요.
  3. append() 메소드를 이용해 리스트 끝에 숫자 하나를 더 추가하세요.
  4. sum(), len() 을 이용하여 리스트에 있는 숫자들의 평균을 계산하고 출력하세요.
  5. 리스트의 첫 번째 요소와 마지막 요소를 출력하세요.
# 직접 코드를 작성하고 실행해보세요!
fav_numbers = [7, 11, 3, 25, 42]
print(f"리스트 길이: {len(fav_numbers)}")

fav_numbers.append(100)
print(f"추가 후 리스트: {fav_numbers}")

average = sum(fav_numbers) / len(fav_numbers)
print(f"평균: {average}")

print(f"첫 번째 요소: {fav_numbers[0]}")
print(f"마지막 요소: {fav_numbers[-1]}")

 

연습 문제

  1. 1부터 10까지의 정수를 요소로 가지는 리스트 numbers_1_to_10 을 만드세요. (range()list() 함수를 함께 사용하면 편리합니다: list(range(1, 11)))

  2. 위 리스트 numbers_1_to_10 에서 슬라이싱을 이용하여 다음 부분 리스트들을 추출하여 출력하세요.

    • 인덱스 3부터 7까지의 요소들 ([3, 4, 5, 6, 7])
    • 리스트의 마지막 3개 요소
    • 리스트의 모든 홀수 요소 ([1, 3, 5, 7, 9])
  3. 5명의 친구 이름을 저장한 리스트 friends 를 만들고, for 반복문을 이용하여 각 친구의 이름을 "안녕, [이름]!" 형식으로 출력하세요.

  4. 10개의 임의의 점수(0~100 사이 정수)를 포함하는 리스트를 만들고 (random.randint(0, 100) 10번 사용 - import random 필요), 이 리스트에서 최댓값과 최솟값을 찾아 출력하는 프로그램을 작성하세요. (min(), max() 사용)

 

COMMENTS

이름

건강,21,경제,8,교통수단,6,선거,2,세금,1,시니어,1,음식,9,정부,7,집안관리,5,평생교육,15,software,11,
ltr
item
아이스콘.day: Ch 05. 리스트로 데이터 모으기 [파이썬 고등 수학 정복]
Ch 05. 리스트로 데이터 모으기 [파이썬 고등 수학 정복]
아이스콘.day
http://www.icecone.day/2025/04/python-high-school-math-ch05-lists-data-collections.html
http://www.icecone.day/
http://www.icecone.day/
http://www.icecone.day/2025/04/python-high-school-math-ch05-lists-data-collections.html
true
7981093494699837537
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE Search in 아이스콘.day ALL POSTS Not found any post match with your request Back Home 일요일 월요일 화요일 수요일 목요일 금요일 토요일 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월 Jan Feb Mar Apr 5월 Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago 어제 $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy 목차