티스토리 뷰

Python/Process

[Python] 리스트 (list)

Aaron 2019. 1. 25. 17:38
반응형




리스트 (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/




반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday