[DAY 2] List/Array
List
- 시퀀스 자료형, 여러 데이터들의 집합(데이터 구조)
- int, float 같은 다양한 자료형을 담을 수 있음
- 많은 데이터를 효율적으로 관리할 수 있음
- list 특징, 기능
- 인덱싱
- 슬라이싱
- 다양한 연산
- 다양한 Data Type이 하나의 리스트에 들어갈 수 있음
Indexing (인덱싱)
- list에 있는 값들은 주소(offset)를 가짐
- 주소를 사용해 할당된 값(element)을 호출
len(배열)
: 배열의 길이 리턴1 2 3 4 5
colors = ['red', 'blue', 'green'] print (colors[0]) # red print (colors[2]) # green print (len(colors)) # 3 # len은 list의 길이를 반환
슬라이싱 slicing
- list의 값들을 잘라서 쓰는 것이 슬라이싱
- list의 주소 값을 기반으로 부분 값을 반환
보통 시작하는 값을 포함하여 시작해서, 끝 값을 포함하지 않음
1 2 3 4 5 6 7
cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원'] print (cities[0:6]) # a번수의 0부터 5까지 print(a[-9:]) # -9부터 끝까지 print (cities[:]) # a변수의 처음부터 끝까지 print (cities[-50:50]) # 범위를 넘어갈 경우 자동으로 최대 범위를 지정 print (cities[::2]) # 2칸 단위로 print(a[::-1]) # 역순으로
리스트 연산
- concatenation, is in, 연산 함수들
- 추가/삭제
- append, extend, insert, remove, del 등 활용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
# 슬라이싱과 추가/삭제 연산 >>> color = ['red', 'blue', 'green'] >>> color2 = ['orange', 'black', 'white'] >>> print (color + color2) # 두 리스트 합치기 # 값은 저장되지 않음 >>> total_color = color + color2 # concatenate는 저장까지 해줘야함 >>> len(color) # 리스트 길이 # 추가 >>> color.append("white") # 리스트에 "white" 추가 / 변화 O >>> color.extend(["black","purple"]) # 리스트에 새로운 리스트 추가 / 변화 O >>> color.insert(0,"orange") # 0번째 주소에 "orange" 추가 >>> print (color) # ['orange', 'yellow', 'blue', 'green', 'white', 'black', 'purple'] >>> print (color * 2) # color 리스트 2회 반복 # ['orange', 'red', 'blue', 'green', 'white', 'black', # 'purple', 'orange', 'red', 'blue', 'green', 'white', 'black', 'purple'] # 변경 >>> color[0] = 'yellow' # 0번째 리스트의 값을 변경 # 리스트에 특정 값이 있는지 체크 >>> 'blue' in color2 # 리스트 color2에 문자열 'blue'가 있는지, 존재 여부 반환 >>> item in list # 리스트에 아이템이 있는지 확인 (있으면 True) >>> item not in list # 리스트에 아이템이 없는지 확인 (없으면 True) # 삭제 >>> color.remove("white") # 리스트에 "white" 삭제 / 변화 O >>> del color[0] # 0번째 주소 리스트 객체 삭제 / 변화 O (메모리를 날림)
메모리 저장 방식
- 파이썬은 해당 리스트 변수에는 리스트 주소값이 저장됨
a = b
라고 선언하는 순간 두 변수는 같은 주소값을 저장- 따라서, 값을 변화시켰다면 ➡ 두 변수에 변화한 내용이 적용됨
b = a[:]
라고 선언해야 값을 복사함1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
>>> a = [5, 4, 3, 2, 1] >>> b = [1, 2, 3, 4, 5] >>> b = a # a와 b가 같은 주소를 가리킴 >>> print (b) # [5, 4, 3, 2, 1] >>> sorted(a) # 스스로 변화하지 않음 # [5, 4, 3, 2, 1] >>> a.sort() # 스스로 변화하는 함수 # [1, 2, 3, 4, 5] >>> print (b) # [1, 2, 3, 4, 5] >>> b = [6,7,8,9,10] >>> print (a, b) # [1, 2, 3, 4, 5] [6, 7, 8, 9, 10] # 데이터(값)을 복사하여 가져오는 것(두 변수가 메모리를 따로 사용) >>> b = a[:]
패킹과 언패킹
- 패킹 : 한 변수에 여러 개의 데이터를 넣는 것
t = [1, 2, 3]
- 언패킹 : 한 변수의 데이터를 각각의 변수로 반환
a, b, c = t
1 2 3 4
t = [1, 2, 3] a, b, c = t print(t, a, b, c) # [1, 2, 3] 1 2 3
이차원 리스트
- 리스트 안에 리스트를 만들어 행렬(Matrix) 생성
- 이차원 리스트의 복사
- 이차원 리스트의 경우,
a = b[:]
불가능 import copy
copy.deepcopy(변수)
kor_score = [49,79,20,100,80] math_score = [43,59,85,30, 90] eng_score = [49,79,48,60,100] midterm_score = [kor_score, math_score, eng_score] print (midterm_score[0][2]) # 20 copy.deepcopy(midterm_score) # 이차원 배열 복사
- 이차원 리스트의 경우,