티스토리 뷰
리스트 (1차원 자료구조 = 배열)
l = [val1, val2, ...]
# vector in R = Python list
# 리스트 생성
>>> l1 = [1,2,3,4,5,6,7,8,9,10]
# 리스트의 요소 추가 : append
>>> la = []
>>> la.append(1)
>>> la.append(2)
>>> la
[1, 2]
# 리스트의 요소 삭제 : del
>>> l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> del(l1[2]) # 특정 위치의 요소 삭제
>>> l1
[1, 2, 4, 5, 6, 7, 8, 9, 10]
>>> l1[2:4] = [] # 슬라이스 색인으로 여러 요소 삭제
>>> l1
[1, 2, 6, 7, 8, 9, 10]
# 리스트 삭제
>>> l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l1 = [] # 요소만 삭제
>>> l1
[]
>>> l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l1 = None; # 요소와 리스트 틀까지 삭제
>>> l1
(공백)
>>> l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> del(l1) # 리스트 변수 자체를 삭제
>>> l1
NameError: name 'l1' is not defined
# 리스트는 연산은 불가 -> 데이터 확장으로 적용 (연산 필요 시 적용함수 사용)
>>> l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l2 = [1, 2]
>>> l1 + l2 # 데이터 확장
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2]
>>> star = '\u2605'
>>> star
'★'
>>> star * 3
'★★★'
# 리스트 색인 : [시작값, 끝값-1, 증가값]
>>> l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l1[9] # 정방향 위치 색인
10
>>> l1[-1] # 역방향 위치 색인
10
>>> l1[2:4] # 슬라이스 색인
[3, 4]
>>> l1[2:]
[3, 4, 5, 6, 7, 8, 9, 10]
>>> l1[:4]
[1, 2, 3, 4]
>>> l1[1:10:2] # jump 색인
[2, 4, 6, 8, 10]
>>> l1[::2]
[1, 3, 5, 7, 9]
>>> l1[0:10:2]
[1, 3, 5, 7, 9]
>>> l1[::-1] # 역순 색인
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> l1[::-2]
[10, 8, 6, 4, 2]
# 리스트의 요소 수정
>>> l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l1[0] = 100 # 위치 색인으로 수정
>>> l1
[100, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> l1[2:4] = [300,400] # 슬라이스 색인으로 수정
>>> l1
[100, 2, 300, 400, 5, 6, 7, 8, 9, 10]
>>> l1[2] = [301, 302] # 리스트로 수정
>>> l1
[100, 2, [301, 302], 400, 5, 6, 7, 8, 9, 10]
# 리스트 복사
# 리스트의 기본적인 복사는 기존 리스트의 주소를 공유하는 개념
# 같은 메모리 주소를 사용하고 이름만 다르게 표현
# 얇은 복사
>>> l1 = [1, 2, 3]
>>> l2 = [10, 20, 30]
>>> l2 = l1
>>> l2
[1, 2, 3]
>>> l1.append(4)
>>> l1
[1, 2, 3, 4]
>>> l2
[1, 2, 3, 4]
>>> id(l1) ; id(l2) # 이름만 다를 뿐 같은 메모리 영역을 사용 (메모리 성능을 위해)
49143304
49143304
# 깊은 복사(디카피)
>>> l3=l1[:]
>>> l1.append(6)
>>> l2
[1, 2, 3, 4, 5, 6]
>>> l3
[1, 2, 3, 4, 5]
>>> id(l1) ; id(l2) ; id(l3)
49143304
49143304
49545608 # 다른 영역의 메모리 사용
2차원 리스트 (실제 2차원의 구조는 갖지 못 하고, 2차원인 것 처럼 출력)
>>> l1 = [[1,2,3],[4,5,6],[7,8,9]] # 리스트에 여러 리스트를 삽입해도 1차원
>>> len(l1)
3
>>> l1[1]
[4, 5, 6]
>>> l1[1][1] # 리스트 내 리스트를 색인
5
# 2차원 리스트처럼 출력해주는 사용자함수 생성
>>> def print_list(list, sep = '') :
for i in range(0,len(list)) :
for j in range(0, len(list[i])) :
print('%2d' % list[i][j], end = sep)
print('')
>>> l1 = [[1,2,3],[4,5,6],[7,8,9]]
>>> print_list(l1)
1 2 3
4 5 6
7 8 9
>>> l2 = [[1,2,3,4],[4,6,7],[7,8]]
>>> print_list(l2)
1 2 3 4
4 6 7
7 8
>>> print_list(l2, '/')
1/ 2/ 3/ 4/
4/ 6/ 7/
7/ 8/
'Python > Process' 카테고리의 다른 글
[Python] 튜플(tuple) (0) | 2019.01.28 |
---|---|
[Python] 리스트 메서드 (list method) (0) | 2019.01.25 |
[Python] 반복문(for, where, 무한루프, break, continue, pass, next) (0) | 2019.01.25 |
[Python] 조건문(if, ifelse, elseif) (0) | 2019.01.24 |
[Python] 문자열 메서드(method) (0) | 2019.01.23 |