십대를 위한 코딩/십대를 위한 파이썬

10. 리스트 복사와 고급 활용

forSilver 2025. 3. 31. 15:40
반응형

📘 Day 10. 리스트 복사와 고급 활용


1. 리스트 복사 방법

✅ 전체 복사 방법

방법 설명

[:] 전체 슬라이싱 복사
list() 생성자를 이용한 복사
.copy() 리스트 메서드를 이용한 복사
a = [1, 2, 3]
b = a[:]           # 슬라이싱
c = list(a)        # list 함수
d = a.copy()       # copy 메서드

모두 얕은 복사(shallow copy)에 해당
→ 리스트 안에 중첩 리스트가 있다면 내부 요소는 공유됨


🔁 깊은 복사(Deep Copy)

  • 중첩 리스트까지 완전히 복사할 때 사용
  • copy 모듈의 deepcopy() 함수 사용
import copy

a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)

2. 리스트 비교

  • 같은 인덱스의 값을 하나씩 비교
  • 값이 다르면 그 시점에서 비교 종료
a = [1, 2, 3]
b = [1, 2, 4]
print(a < b)   # True

3. 리스트 순회 방법

일반적인 for문

for i in range(len(a)):
    print(a[i])

반복자 사용

for item in a:
    print(item)

enumerate() 함수

for i, value in enumerate(a):
    print(i, value)

zip() 함수

  • 여러 리스트를 병렬로 순회
names = ['홍길동', '이몽룡']
scores = [90, 85]
for name, score in zip(names, scores):
    print(name, score)

4. 리스트 컴프리헨션 (List Comprehension)

기본 형식

squares = [x**2 for x in range(1, 6)]

조건 포함 형식

even = [x for x in range(10) if x % 2 == 0]
  • 간결하고 효율적인 코드 작성 가능

5. 파이썬 내장 산술 함수

함수 설명 예시

sum() 합계 sum([1,2,3]) → 6
max() 최대값 max([1,5,3]) → 5
min() 최소값 min([1,5,3]) → 1
abs() 절대값 abs(-7) → 7
round() 반올림 round(3.14159, 2) → 3.14
divmod() 몫과 나머지 divmod(10,3) → (3, 1)

6. 리스트 활용 실습 예제

✅ 문제 1

5개의 정수를 입력받아 평균과 평균과의 차이 출력

예시 코드

nums = []
total = 0

for _ in range(5):
    n = int(input("정수 입력: "))
    nums.append(n)
    total += n

avg = total / 5
print(f"평균: {avg}")

for n in nums:
    diff = abs(n - avg)
    print(f"{n}와 평균의 차이: {diff}")

✅ 문제 2

0이 입력될 때까지 정수를 입력받아 평균, 편차, 편차 제곱, 분산 계산

예시 코드

nums = []

while True:
    n = int(input("정수 입력 (0 입력 시 종료): "))
    if n == 0:
        break
    nums.append(n)

if nums:
    avg = sum(nums) / len(nums)
    print(f"평균: {avg:.2f}")

    deviations = [x - avg for x in nums]
    dev_squares = [d**2 for d in deviations]
    variance = sum(dev_squares) / len(nums)

    for i in range(len(nums)):
        print(f"값: {nums[i]}, 편차: {deviations[i]:.2f}, 편차제곱: {dev_squares[i]:.2f}")
    print(f"분산: {variance:.2f}")
else:
    print("입력된 값이 없습니다.")

✅ 오늘의 정리

항목 설명

복사 얕은 복사 vs 깊은 복사 (copy.deepcopy())
리스트 순회 for, enumerate(), zip()
리스트 컴프리헨션 [] 안에서 for문과 조건 사용
내장 산술 함수 sum(), max(), round() 등
실습 평균, 편차, 분산 계산 문제

다음 차시에서는 **딕셔너리(dict)**와 집합(set) 자료형을 활용하여, 키-값 관리 및 중복 없는 데이터 처리 방법을 학습합니다.