2025.03.05(수) 슈퍼코딩 AI/DATA Day 9 일일보고 - 데이터 자료형_리스트

Honey_Bunny·2025년 3월 6일

슈퍼코딩

목록 보기
11/23

리스트 자료형 (list)


  • 리스트(list)는 자료들의 모임이다
  • list() 생성자나 []로 리스트를 만든다
  • 리스트에 저장된 각각의 데이터는 인덱스를 가진다
  • 어떤 자료형도 저장이 가능하다
  • 데이터의 입력된 순서가 유지 된다

list1 = list()
print(list1, type(list1))
list2 = []
print(list2, type(list2))
list3 = [1, 2, 3, 4, 5]
print(list3, type(list3))
list4 = [1]
print(list4, type(list4))
list5 = [1, 2, 3, 1.1, 2.2, 'A', True, (1,2,3)]
print(list5, type(list5))
출력 : <class 'list'>
출력 : <class 'list'>
출력 : [1, 2, 3, 4, 5] <class 'list'>
출력 : [1] <class 'list'>
출력 : [1, 2, 3, 1.1, 2.2 'A', True, (1, 2, 3)] <class 'list'>

리스트의 인덱스 및 슬라이싱

  • 리스트는 인덱스와 슬라이스를 사용할 수 있다

리스트의 인덱스

 +-----+-----+-----+-----+-----+-----+
 |  1  | "2" | "a" | "d" | 1.2 |  5  |
 +-----+-----+-----+-----+-----+-----+
 0     1     2     3     4     5     6
-6    -5    -4    -3    -2    -1
list1 = [1, "2", "a", "d", 5]
print(len(list1))   # 리스트의 길이
print(list1[:])     # 전체 리스트
print(list1[3])     # 앞에서 네번째 데이터, 3번 인덱스의 데이터
print(list1[-4])    # 뒤에서 네번째 데이터, 2번 인덱스의 데이터
print(list1[:2])    # 앞에서 2번째 까지
print(list1[2:])    # 앞에서 2번째 이후 부터
print(list1[2:4])   # 인텍스 2에서 부터 4 까지 부분리스트
print(list1[:-4])   # 처음부터 뒤에서 네번째 까지
print(list1[-4:])   # 마지막 네개의 데이터
출력 : 5
출력 : [1, '2', 'a', 'd' 5]
출력 : d
출력 : 2
출력 : [1, '2']
출력 : ['a', 'd', 5]
출력 : ['a', 'd']
출력 : [1]
출력 : ['2', 'a', 'd', 5]

리스트 활용 예시

list1 = ["홍길동", 24, "남자", 1990, 5, 31, "010-1234-5678", ["아빠", "엄마", "동생"]]
print("이름:", list1[0])
print("전화번호:", list1[6])
print("생년월일:", list1[3:6])
print("가족:", list1[-1])
출력 - 이름 : 홍길동
출력 - 전화번호 : 010-1234-5678
출력 - 생년월일 : [1990, 5, 31]
출력 - 가족 : ['아빠', '엄마', '동생']
  • 중첩 리스트 (Multidemential list) : 다중으로 리스트를 중첩할 수 있다
  • 주의하여야 이미지를 2차원 리스트로 표현 할경우, x,y 좌표이 값을 읽으려면 data[y][x] 로 읽어야 한다

1차원 리스트

list1 = [1, 2, 3, 4]
print(list1)
print(list1[3])           # 3번째 원소
출력 : [1, 2, 3, 4] 
출력 : 4

2차원 리스트

list2 = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    [13, 14, 15, 16]
]
print(list2)
print(list2[2][3])        # 2번 인덱스 행의, 3번 인덱스 열의 원소  (3행의 4열 원소)
출력 : [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] 
출력 : 12

3차원 리스트

list3 = [
    [
        [1, 2, 3],
        [4, 5, 6]
    ],
    [
        [7, 8, 9],
        [10, 11, 12]
    ]
]
print(list3)
print(list3[1][0][1])     # 1번 인덱스 원소의, 0번 인덱스 원소의, 1번 인덱스 원소
출력 : [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
출력 : 8
  • 리스트는 가변(mutable) 객체이므로 특정 인덱스의 데이터를 변경할 수 있다.
a = ["a","b","c","d","e"]
print(a)
출력 : ['a', 'b', 'c', 'd', 'e']
a[0] = 1
print(a)
출력 : [1, 'b', 'c', 'd', 'e'] 
a[4] = 5
print(a)
출력 : [1, 'b', 'c', 'd', 5] 
  • 한번에 특정 구간의 데이터를 바꾸기
a[1:4] = [2, 3, 4]
print(a)
출력 : [1, 2, 3, 4, 5] 

리스트의 특징

  • 리스트는 가변객체 이다
  • 리스트의 값을 변경하명 객체 자체에 변화가 생기므로 주의 필요하다
  • 리스트의 값만 가져오려면 list.copy()를 사용한다

list1 = [1, 2, "삼", 4, 5]
list2 = list1 # list2에 list1을 넣었을 때 똑같아 보이지만, 객체 자체가 copy가 되는 것( list2와 list1 같은 객체) 
list3 = list1.copy() # list상으로 같은 객체가 아니기 때문에 앞의 영향이 안 끼침 (copy한 값이기 때문)
print(list1, list2, list3)
list[2] = 3 # 리스트 값 변경
print(list1, list2, list3)
[1, 2, '삼', 4, 5] [1, 2, '삼', 4, 5] [1, 2, '삼', 4, 5]
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, '삼', 4, 5]

리스트의 기본 메소드

insert(삽입할 인덱스, 삽입할 원소) : 리스트에 원소를 삽입
append(추가할 원소) : 리스트의 마지막 위치에 원소를 추가
remove(삭제할 원소) : 리스트에서 특정한 값을 가지는 원소를 삭제
sort() : 리스트의 원소를 정렬
clear() : 리스트 데이터 모두 지우기
copy() : 리스트 복사
extend(추가할 리스트) : 원래의 리스트에 추가할 리스트의 원소들을 복사


list1 = [1, 2, "3", 4]
print(list1)
출력 : [1, 2, '3', 4]
list1.append(0)           # 마지막 위치에 0를 추가
print(list1)
출력 : [1, 2, '3', 4, 0] 
list1.insert(2, 3)        # 인덱스 2의 위치에 3를 삽입
print(list1)
출력 : [1, 2, 3, '3', 4, 0] 
list1.remove("3")         # 원소 "3"을 제거
print(list1)
출력 : [1, 2, 3, 4, 0] 
list1.extend([6, 5])      # 원소 6 과 5를 추가
print(list1)
출력 : [1, 2, 3, 4, 0, 6, 5]
list1.sort()              # 오름차순 정렬
print(list1)
출력 : [0, 1, 2, 3, 4, 5, 6] 
list1.sort(reverse=True)  # 내림차순 정렬
print(list1)
출력 : [6, 5, 4, 3, 2, 1, 0] 
list1.clear()             # 모든 값 지우기
print(list1)
출력 : [] 
  • 리스트의 값을 변경하면 객체 자체에 변화가 생기므로 주의해야 한다.
  • 리스트의 값만을 copy 하려면 list.copy() 메소드를 사용한다.
list1 = [1, 2, "삼", 4, 5]
list2 = list1
list3 = list1.copy()
print(list1, list2, list3)
출력 : [1, 2, '삼', 4, 5] [1, 2, '삼', 4, 5] [1, 2, '삼', 4, 5]
list1[2] = 3   # 리스트 값 변경
print(list1, list2, list3)
출력 : [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, '삼', 4, 5]

리스트의 +, * 연산자

  • 연산으로 생성된 리스트는 모두 copy 된 새로운 리스트 이다

list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]
list3 = list1 + list2
print(list3)
출력 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list4 = list1 * 2
print(list4)
출력 : [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
list1[0]=5
print(list3)
print(list4)
출력 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
출력 : [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

원래 리스트 값을 바꾸어도 새로 생성된 리스트 값이 바뀌지 않는다


리스트 초기화 방법

  • 임의이 값으로 리스트 선언

list1 = [0, 2, 4, 6, 8]
print(list1)
출력 : [0, 2, 4, 6, 8]
  • *연산자를 사용하여 초기화
list1 = [0] * 5
print(list1)
출력 : [0, 0, 0, 0, 0]

append() 사용하여 초기화

list1 = []
for i in range(5):
  list1.append(i*2)
  print(list1)
출력 : [0]
출력 : [0, 2]
출력 : [0, 2, 4]
출력 : [0, 2, 4, 6]
출력 : [0, 2, 4, 6, 8]
  • 리스트 컴프리헨션(list comprehension) 으로 초기화
list1 = [ i * 2 for i in range(5) ]
print(list1)
출력 : [0, 2, 4, 6, 8]

2차원 리스트 초기화 하기

  • 주의 : append()를 사용하거나 직접 리스트에 다른 리스트를 선언하여 초기화 할 경우, 원래의 리스트 값이 바뀔 경우 예상치 못한 결과가 나올 수 있다
  • 이러한 사이트 이팩트를 없애기 위해 리스트 컴프리핸션으로 다차원 리스트를 초기화 하는 것을 추천한다
a = [0, 1, 2, 3, 4]
b = [5, 6, 7, 8, 9]
  • 임의의 값으로 2차원 리스트(2x5) 선언하여 초기화
list1 = [a, b]
print(list1)
출력 : [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
  • append()로 2차원 리스트 초기화
list2 = []
list2.append(a)
list2.append(b)
print(list2)
출력 : [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
  • 원래의 리스트 값이 바뀔 경우
a[0] = 5
print(list1)
print(list2)
출력 : [[5, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
출력 : [[5, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
  • 리스트 컴프리핸션을 사용하여 2차원 리스트 초기화 방법 1
list3 = [[0] * 5 for _ in range(2)]
print(list3)
출력 : [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
  • 리스트 컴프리핸션을 사용하여 2차원 리스트 초기화 방법 2
list4 = [[i] * 5 for i in range(2)]
print(list4)
출력 : [[0, 0, 0, 0, 0], [1, 1, 1, 1, 1]]
  • 리스트 컴프리핸션을 사용하여 2차원 리스트 초기화 방법 3
list5 = [[(i * 5) + j for j in range(5)] for i in range(2)]
print(list5)
출력 : [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
  • 리스트 컴프리헨션 with 조건문
[표현식 for 항목 in 반복_가능_객체 if 조건문]
  • for 문을 2개 이상 사용하는 것도 가능하다
[표현식 for 항목1 in 반복_가능_객체1 if 조건문1
      for 항목2 in 반복_가능_객체2 if 조건문2
      ...
      for 항목n in 반복_가능_객체n if 조건문n]

리스트 컴프리헨션 예시

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = [num for num in a if num % 2 == 0]
print(result)
출력 : [2, 4, 6, 8, 10]

다중 리스트 컴프리헨션 예시

a 의 원소중 3의 배수 인것 과 4의 배수인 수를 곱해서 나올 수 있는 모든 경우를 출력
3의 배수: 3, 6, 9
4의 배수: 4, 8

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = [i * j for i in a if i % 3 == 0 for j in a if j % 4 == 0]
print(result)
출력 : [12, 24, 24, 48, 36, 72]
profile
현재 : C# WPF 개발자 / 목표 : AI 의료 영상 분석 연구원

0개의 댓글