[AIVLE SCHOOL] 데이터 다루기(3) - 리스트

춤추는 머쉬룸·2024년 9월 5일

AIVLE SCHOOL 6기

목록 보기
5/80
post-thumbnail

9/5 3, 4, 5, 6세션


A. 리스트[] 자료형

  • 리스트는 여러 값을 묶어서 갖는 컨테이너 자료형 중의 하나
  • 대괄호([ ]) 안에 콤마로 구분해 값을 나열하며, 이 값을 요소라고 함
  • 이 세상 온갖 데이터(숫자, 문자, 파일, 이미지 등등)가 리스트의 요소
  • 중복 된 값이 들어갈 수 있다
  • 요소들의 순서가 지정되어 있고, 바뀌지 않는다

*컨테이너 자료형 : 문자열(String), 리스트(List), 튜플(Tuple), 집합(Set), 딕셔너리(Dictionary)

A-1. 리스트 관련 함수

  • sum() : 리스트 내 요소의 합 반환
  • max() : 리스트 내 요소 중 가장 큰 값을 반환
  • min() : 리스트 내 요소 중 가장 작은 값을 반환
  • len() : 리스트 내 요소의 개수 반환

A-2. 리스트 만들기

A-2-1) 비어있는 리스트 만들기

# 빈 리스트 만들기
> score1 = []
> score2 = list()

A-2-2) 2차원 리스트

  • 리스트를 요소로 갖는 리스트(List of List) 가능
  • 아래 코드에서 score 리스트의 요소는 요소 3개씩을 갖는 리스트 3개
# 2차원 리스트 만들기
score = [[80, 90, 75],
         [85, 70, 99],
         [90, 75, 80]]

A-2-3) range() 함수로 리스트 만들기

  • range(m, n) 함수의 결과는 범위임. 리스트가 아니다.
  • 리스트로 만들기 위해 list(range(m, n)) 처럼 list() 로 감싼다.
  • m부터 n-1 까지의 정수 범위
# 0 ~ 9 정수를 요소로 갖는 리스트
> nums = list(range(10))

# -5 ~ 5 사이의 정수를 요소로 갖는 리스트
> nums = list(range(-5, 6))
  • range(m, n, x) : m부터 n-1까지 x 만큼씩 증가하는 정수

A-2-4) 문자열로 리스트 만들기

  • 문자열이 list() 를 만나면 개별 값으로 들어간다.
# 문자열 하나를 요소로 갖는 리스트
> list_str = ['PYTHON']

> list_str
['PYTHON']

# 개별 문자를 요소로 갖는 리스트 #1
> list_str = list('PYTHON')

> list_str
['P', 'Y', 'T', 'H', 'O', 'N']

B. 리스트 인덱싱

  • 대괄호, 즉 [ ] 안에 인덱스를 지정
  • 0부터 시작하는 순방향 인덱스를 사용해 원하는 위치의 요소를 확인
  • 역방향 인덱스-1부터 시작
# 리스트를 요소로 갖는 리스트
> score = [80, [90, 100, 85], 85, 90]

# 인덱싱
> print(score[1])
> print(score[1][1])

[90, 100, 85]
100

C. 리스트 슬라이싱

  • 인덱스를 사용해 특정 범위의 요소를 찾는 과정을 슬라이싱이라고 함
  • 대괄호안에 [m:n] 형태로 범위를 지정하여 요소를 확인
  • 인덱스 m 부터 n-1 까지, 즉 인덱스 n의 요소는 결과에 포함되지 않음

예제 1 슬라이싱 연습

> member = ['홍길동', 85, '한사랑', 95, '일지매', 90,' 박여인', 75]

# 슬라이싱
> print(member[-4:])
> print(member[:2])

['일지매', 90, ' 박여인', 75]
['홍길동', 85]

예제 2 리스트를 요소로 갖는 리스트를 슬라이싱

> score = [80, [90, 100, 85], 85, 90]

# 슬라이싱
> print(score[1][1:])
[100, 85]

D. 리스트 연산

  • 문자열의 연산과 동일함
  • 더하기결합을, 곱하기반복을 의미
  • 빼기와 나누기 연산은 불가능

예제1 복합 대입 연산자로 리스트 연결

# 빈 리스트 만들기
> score = []

# 리스트 연결
> score += [90, 80, 95, 70]
> score += [70, 75, 90, 100]

> score
[90, 80, 95, 70, 70, 75, 90, 100]

예제2 리스트 반복

# 리스트 만들기
> score1 = [90, 80, 95, 70]

# 리스트 요소를 곱한 수 만큼 반복하기
> score2 = score1 * 2
[90, 80, 95, 70, 90, 80, 95, 70]

예제3 요소를 넣어 리스트 생성

# 요소 0을 20개 가진 리스트 만들기
> my_list = [0] * 20
> print(my_list)

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

예제4 리스트 요소 없애기

# 리스트 만들기
> score1 = [90, 80, 95, 70]

# 리스트에 0 곱하기
> score0 = score1 * 0

> print(score1)
> print(score0)

[90, 80, 95, 70]
[]

E. 요소 변경, 추가, 삭제

E-1. 문자열, 튜플은 변경 불가능한 자료형

문자열은 변경이 불가능하다!
튜플도 변경이 불가능하다! (인덱싱, 슬라이싱은 가능)

E-2. 리스트는 변경 가능한 자료형

사용 가능한 메소드

  • append() : 맨 뒤에 요소 하나만 추가. 반환하는 것이 아니라, 리스트를 직접 변경하는 것.
  • insert() : 특정 위치에 요소 하나만 추가.
  • extend() : 하나의 다른 리스트 연결
  • clear() : 요소 전체 삭제
  • copy() : 리스트 복사 (주소값 다름)

E-2-1) 요소 값 변경

  • 범위가 꼭 1:1 로 매칭되지 않아도 됨
  • 설정한 범위의 기존 요소를 지우고, 해당 위치에 새로운 값이 들어가는 것임
# range() 함수로 리스트 만들기
> nums = list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

> nums[4:7] = [40, 50]
[0, 10, 20, 30, 40, 50, 7, 8, 9]

E-2-2) append(v) : 맨 뒤에 요소 하나만 추가

  • append() 는 반환값이 없음. 작동만 하는 것임. 만약 append() 의 결과를 받으려고 하면 사라져 버림(None 출력).
# 0 ~ 4 정수를 갖는 리스트 만들기
> nums = list(range(5))
[0, 1, 2, 3, 4]

# 맨 뒤에 요소 하나 추가
> nums.append(5)
[0, 1, 2, 3, 4, 5]

# 맨 뒤에 리스트 하나를 요소로 추가
> nums.append([7, 8])
[0, 1, 2, 3, 4, 5, [7, 8]]

E-2-3) insert(i, v) : 중간에 요소 하나만 추가

  • 주의 : 요소를 추가할 때, 파라미터 i는 뒤로 밀고 싶은 요소의 인덱스임
  • 맨 뒤에 추가하고 싶을 때는, append() 를 사용하는 것이 편리함

E-2-4) extend([v]) : 하나의 다른 리스트 연결

  • 하나의 리스트를 가장 뒤에 추가
  • 무조건 [] 로 묶어서 추가해야 함

E-2-5) 리스트 삭제

방법 1 : 요소 삭제

  • del 다음에 인덱싱/슬라이싱 구문을 추가해 해당 요소/범위 삭제
> del nums[7]
> del nums[4:]

방법 2 : 전체 삭제

  • [] 을 대입 : 새로운 주소에 동일한 이름의 빈 리스트 생성
  • clear() : 기존 객체를 유지하면서 요소 삭제

F. 리스트 복사

  • 얉은 복사 : 주소값을 복사한 것. 같은 곳을 가르킴
  • 완전(깊은) 복사 : 아예 다른 주소. 다른 쪽에 영향을 주지 않을 때 완전한 복사임
# 리스트 복사
> nums = list(range(10))
> nums_copy_1 = nums                  # 그냥 복사
> nums_copy_2 = nums[:]               # 전체 범위를 지정하여 복사

# 확인
> print(nums_copy_1)
> print(nums_copy_2)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • copy() : 완전 복사 메소드

G. 리스트 관련 메소드 (추가)

  • reverse() : 앞뒤 순서를 바꿈
  • count(n) : 요소 중 n 이 몇 개 있는 지
  • index(v) : 요소 v 의 인덱스가 몇 번인지
  • sort() : 오름차순으로 정렬
  • sort(reverse=True) : 내림차순으로 정렬
  • remove(v) : 요소 v 를 제거. 여러개일 경우 가장 처음의 요소 하나만 제거
  • pop(i) : i 번째 요소 삭제하고 삭제한 요소 반환

0개의 댓글