IT Cookie

[Python 문법] 리스트 자료형 본문

SW/Python

[Python 문법] 리스트 자료형

ahhyeon 2023. 3. 7. 00:49

2. 리스트 자료형

  • 여러개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형
    • USER 입장에서 C나 JAVA에서의 배열(array)의 기능 및 연결 리스트와 유사한 기능을 지원
    • 배열 또는 테이블이라고 부름

2-1. 리스트 초기화

  • 리스트는 대괄호([])안에 원소를 넣어 초기화 / 쉼표(,)로 원소를 구분
  • 비어 있는 리스트를 선언하고자 할 때는 list() 혹은 []를 이용
  • 리스트의 원소에 접근할 때는 인덱스(index) 값을 괄호에 넣음
    • index는 0부터 시작함
# 직접 데이터를 넣어 초기화
a = [1,2,3,4,5,6,7,8,9]

print(a) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 7번째 원소만 출력
print(a[6]) // 7

# 크기가 N, 모든 값이 0인 1차원 리스트 초기화
n = 7
a = [0] * n
print(a) // [0, 0, 0, 0, 0, 0, 0]
a = [3, 6, 9, 12, 15]
  #  0  1  2   3  4
  
print(a)  // [3, 6, 9, 12, 15]

a[3] = 1
print(a) // [3, 6, 9, 1, 15]

2-2. 리스트의 인덱싱

  • 인덱스 값을 입력하여 리스트의 특정한 원소에 접근
    • 파이썬의 인덱스 값은 양의 정수, 음의 정수 모두 사용함
    • 음의 정수를 넣을 경우, 원소를 거꾸로 탐색함
a = [1,2,3,4,5,6,7,8,9]

# 7번째 원소만 출력
print(a[6])   // 7

# 뒤에서 1번째 원소 출력
print(a[-1])  // 9

# 뒤에서 2번째 원소 출력
print(a[-2])  // 8

# 3번째 원소값 변경
a[2] = 7
print(a)     // [1, 2, 7, 4, 5, 6, 7, 8, 9]

2-3. 리스트의 슬라이싱

  • 리스트에서 연속적인 위치를 갖는 원소들을 가져올때 사용
    • 대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 끝 인덱스를 설정
    • 단, 끝 인덱스는 실제 인덱스보다 1을 더 크게 설정할것
a = [1,2,3,4,5,6,7,8,9]

# 4번째 원소만 출력
print(a[6])    // 7

# 4번째 원소부터 7번째 원소까지
print(a[3:8])  // [4, 5, 6, 7, 8]

2-4. 리스트 컴프리헨션(1)

  • 리스트를 초기화하는 방법
    • 대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화
# 0부터 9까지의 수를 포함하는 리스트
array = [i for i in range(10)]
print(array)

// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 0부터 23까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(24) if i % 2 == 1]
print(array)

// [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]

# 1부터 15까지의 수들의 제곱값을 포함하는 리스트
array = [i * i for i in range(1,16)]
print(array)

// [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225]

[참고] 리스트 컴프리헨션 VS 일반적인 코드

👀 방식은 다르나 실행결과 두 코드 모두 동일하게 출력

# 리스트 컴프리헨션
# 0부터 23까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(24) if i % 2 == 1]
print(array)

// [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]
# 일반적인 코드
# 0부터 23까지의 수 중에서 홀수만 포함하는 리스트
array = []
for i in range(24):
  if i % 2 == 1:
    array.append(i)
print(array)

// [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]
a = [2,4,6,8,9,9,9]
remove_set = {4,9} # 집합 자료형

# remove_list에 포함되지 않은 값만 저장
result = [i for i in a if i not in remove_set]
print(result)

// [2,6,8]

2-5. 리스트 컴프리헨션(2)

  • 2차원 리스트를 초기화할 때 효과적으로 사용
# n * m 크기의 2차원 리스트를 한 번에 초기화 해야 할 경우 매우 유용함

n = 5
m = 3
array = [[0] * m for i in range(n)]
print(array)

// [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
# 만약 2차원 리스트를 초기화 할 경우 이런 경우 잘못된 결과가 나올 수 있음
# 해당 예시 코드는 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식됨

n = 5
m = 3
array = [[0] * m ] * n
print(array)

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

array[1][1] = 7
print(array)

// [[0, 7, 0], [0, 7, 0], [0, 7, 0], [0, 7, 0], [0, 7, 0]]

2-6. 리스트 - 기타 메서드

a = [3,9,6,15,5]
print("기본 리스트 : ", a)

// 기본 리스트 :  [3, 9, 6, 15, 5]

# 리스트에 원소 삽입
a.append(2)
print("삽입 : ", a)

// 삽입 :  [3, 9, 6, 15, 5, 2]

# 오름차순 정렬
a.sort()
print("오름차순 : ", a)

// 오름차순 :  [2, 3, 5, 6, 9, 15]

# 내림차순 정렬
a.sort(reverse = True)
print("내림차순 : ", a)

// 내림차순 :  [15, 9, 6, 5, 3, 2]
a = [9,8,7,6,5]

# 리스트 원소 뒤집기
a.reverse()
print("원소 뒤집기 : ", a)

// 원소 뒤집기 :  [5, 6, 7, 8, 9]

# 특정 인덱스에 데이터 추가
a.insert(1,6)
print("인덱스 1에 6 추가 : ", a)

// 인덱스 1에 6 추가 :  [5, 6, 6, 7, 8, 9]

# 특정 값인 데이터 개수 세기
print("값이 6인 데이터 개수 : ", a.count(6))

// 값이 6인 데이터 개수 :  2

# 특정 값 데이터 삭제
a.remove(5)
print("값이 5인 데이터 삭제 : ", a)

// 값이 5인 데이터 삭제 :  [6, 6, 7, 8, 9]

'SW > Python' 카테고리의 다른 글

[Python 문법] 조건문  (0) 2023.03.07
[Python 문법] 기본 입출력  (0) 2023.03.07
[Python 문법] 사전 & 집합 자료형  (1) 2023.03.07
[Python 문법] 문자열 & 튜플 자료형  (0) 2023.03.07
[Python 문법] 수 자료형  (0) 2023.03.07
Comments