리스트 (Lists)

Tip학습 목표
  • 여러 데이터를 하나의 묶음(collections)으로 관리해야 하는 이유를 이해합니다.
  • 리스트를 생성하고, 인덱싱과 슬라이싱을 통해 데이터에 접근하며, 메서드를 사용하여 리스트를 조작하는 방법을 익힙니다.
Note질문
  • 여러 개의 데이터를 하나의 변수에 저장하려면 어떻게 해야 하나요?

리스트(List)를 사용한 데이터 저장

  • 수백 개의 데이터를 다루기 위해 매번 새로운 변수를 만드는 것은 매우 비효율적입니다.
  • 연관된 데이터들을 하나의 단위로 묶어서 관리하려면 리스트(list)를 사용합니다.
    • 리스트는 대괄호 [...] 안에 요소들을 쉼표(,)로 구분하여 작성합니다.
  • 내장 함수 len()을 사용하면 리스트에 포함된 요소의 개수를 확인할 수 있습니다.
pressures = [0.273, 0.275, 0.277, 0.275, 0.276]
print('pressures:', pressures)
print('length:', len(pressures))
pressures: [0.273, 0.275, 0.277, 0.275, 0.276]
length: 5

인덱스(Index)를 이용한 요소 접근

  • 문자열과 마찬가지로 대괄호와 인덱스 번호를 사용하여 리스트의 개별 요소에 접근할 수 있습니다. 인덱스는 0부터 시작합니다.
print('zeroth item of pressures:', pressures[0])
print('fourth item of pressures:', pressures[4])
zeroth item of pressures: 0.273
fourth item of pressures: 0.276

리스트 요소 수정하기

  • 할당 연산자(=)를 사용하여 특정 인덱스의 값을 새로운 값으로 교체할 수 있습니다.
pressures[0] = 0.265
print('pressures is now:', pressures)
pressures is now: [0.265, 0.275, 0.277, 0.275, 0.276]

요소 추가하기: appendextend

  • 리스트 끝에 새로운 요소를 추가하려면 append() 메서드를 사용합니다.
primes = [2, 3, 5]
primes.append(7)
print('primes:', primes)
primes: [2, 3, 5, 7]
  • 메서드(Method)는 특정 객체에 종속되어 동작하는 함수입니다. 객체명.메서드명() 형태로 호출합니다.
  • extend() 메서드는 다른 리스트의 모든 요소를 기존 리스트 뒤에 합칠 때 사용합니다.
  • 주의: append()에 리스트를 전달하면 리스트 자체가 하나의 요소로 추가되어 중첩 리스트(list of lists)가 생성됩니다.
primes = [2, 3, 5, 7]
primes.extend([11, 13])  # 요소들이 하나씩 추가됨
primes.append([17, 19])  # 리스트 자체가 하나의 요소로 추가됨
print(primes)
[2, 3, 5, 7, 11, 13, [17, 19]]

요소 삭제하기: del

  • del 키워드를 사용하여 특정 인덱스의 요소를 삭제할 수 있습니다. 삭제 후 리스트의 길이는 줄어듭니다.
primes = [2, 3, 5, 7, 9]
del primes[4]  # 인덱스 4의 요소(9) 삭제
print(primes)
[2, 3, 5, 7]

빈 리스트와 다양한 타입의 혼용

  • 요소가 없는 빈 리스트([])를 생성할 수 있으며, 이는 데이터를 동적으로 추가할 때 시작점으로 유용합니다.
  • 하나의 리스트 안에 숫자, 문자열 등 서로 다른 타입의 데이터를 함께 담을 수 있습니다.
goals = [1, 'Create lists.', 2, 'Extract items.']

문자열의 인덱싱과 불변성(Immutability)

  • 문자열도 리스트처럼 인덱스를 통해 개별 문자에 접근할 수 있습니다.
  • 하지만 문자열은 불변(immutable) 속성을 가지므로, 특정 인덱스의 문자를 직접 수정할 수는 없습니다. 수정을 원한다면 새로운 문자열을 만들어야 합니다.
element = 'carbon'
print(element[0])
# element[0] = 'C'  # TypeError 발생
c

인덱스 범위 오류 (IndexError)

  • 리스트의 범위를 벗어난 인덱스에 접근하려고 하면 IndexError가 발생합니다. 이는 프로그램 실행 중에 발생하는 런타임 오류입니다.
# print(element[99])  # IndexError 발생

Important연습 문제

빈칸 채우기

다음 코드의 빈칸을 채워 리스트를 조작해 보세요.

values = []
values.append(1)
values.append(3)
values.append(5)
print('first time:', values)
values = values[1:]
print('second time:', values)
Important연습 문제

슬라이싱과 음수 인덱스

  1. values[start:stop] 슬라이싱에서 추출되는 요소의 개수는 최대 몇 개인가요?
  2. 음수 인덱스 -1은 무엇을 의미하나요?
  3. 리스트의 마지막 요소를 제외한 나머지 모든 요소를 출력하려면 어떻게 해야 하나요?
  1. stop - start 개입니다.
  2. 리스트의 맨 마지막 요소를 가리킵니다.
  3. values[:-1]을 사용합니다.
Important연습 문제

정렬: sort()와 sorted()의 차이

list.sort() 메서드와 sorted() 함수의 차이점을 설명해 보세요.

  • list.sort(): 원본 리스트를 직접 정렬하며 반환값은 None입니다.
  • sorted(list): 원본은 그대로 두고 정렬된 새로운 리스트를 반환합니다.
Important연습 문제

참조와 복제

new = oldnew = old[:]의 차이점은 무엇인가요?

  • new = old: 동일한 리스트 객체를 가리키는 참조를 만듭니다. new를 수정하면 old도 함께 변합니다.
  • new = old[:]: 리스트의 모든 요소를 복사하여 새로운 객체를 만듭니다. new를 수정해도 old는 변하지 않습니다.
Note핵심 요약
  • 리스트는 여러 데이터를 하나의 변수에 묶어서 저장합니다.
  • 인덱스를 사용하여 개별 요소에 접근하거나 값을 수정할 수 있습니다.
  • append, extend, del 등을 사용하여 리스트를 동적으로 조작합니다.
  • 문자열은 인덱싱은 가능하지만 내용을 직접 수정할 수 없는 불변 객체입니다.
  • 인덱스 범위를 벗어나지 않도록 주의해야 합니다.