리스트에 대한 내용이다.
5일차와 연결된다.
========================== Python ==========================
##### 리스트
### 리스트 기본
a = []
type(a) # <class 'list'>
id(a) # 622932132616
hash(a) # 고정값이 아니라서 접근이 안 된다. TypeError: unhashable type: 'list'
# 튜플과의 비교
a = ()
type(a) # <class 'tuple'>
id(a) # 622881210440
hash(a) # 고정값이라 접근이 된다. 3527539
# 사전과의 비교
a = {}
type(a) # <class 'dict'>622932134536622881210440
hash(a) # 고정값이 아니라서 접근이 안 된다. TypeError: unhashable type: 'dict'
### 리스트 특징 확인
# 내부 데이터의 변형이 쉽다.
a = [1,'3'] # 타입과 관계없이 다 집어 넣을 수 있다.
a # [1, '3']
len(a) # 2
a[1] = 'Python' # 내부 데이터의 변환이 쉽다.
a # [1, 'Python']
a.append('파이썬') # 추가도 쉽다.
a # [1, 'Python', '파이썬']
list('Python') # ['P', 'y', 't', 'h', 'o', 'n']
list(1) # TypeError: 'int' object is not iterable
a = [1,2,3]
a * 3 # [1, 2, 3, 1, 2, 3, 1, 2, 3]
# 리스트 자체를 만들기 쉽다.
1 in a # True
a = range(10) # range(0,10)
a = list(a)
a # [0,1,2,3,4,5,6,7,8,9]
a[-1] # 9
### 리스트의 연산
a = [1,2,3]
a[0] = 100 + a[0]
a # [101,2,3]
# 리스트끼리의 합. 두 리스트가 합쳐진다.
a = [1,2,3]
b = [4,5,6]
a+b # [1, 2, 3, 4, 5, 6]
### 리스트의 차원구조.
# 2차원 구조. (다차원도 가능)
a = [[1,2,3],[4,5,6],[7,8,9]]
a[1][2] # 6. 인덱스 1번 리스트의 2번 인덱스 값을 출력한다.
### 리스트의 레퍼런스 변경
# id의 변경. 다른 리스트를 할당하면 다른 레퍼런스가 달라지게 된다.
a = [1,2,3]
id(a) # 485545588936
a = ['1','2','3']
id(a) # 485542191368
### 리스트 내부 데이터의 삭제
a = [1,2,3,4]
del a[0] # a[0]을 삭제했다. 인덱스 값은 하나씩 내려간다.
a # [2, 3, 4].
a[0] # 결과는 2. 인덱스 값이 하나 내려가서 2가 출력된다.
del a # 리스트 자체를 삭제
a # 오류가 발생. NameError: name 'a' is not defined
### 인덱싱을 통한 중첩 리스트
# 형태 분석
a = [1,2,3]
b = [a,4,5,6] # [[1, 2, 3], 4, 5, 6]
b[0][2] # 결과는 3. a에 접근이 가능하다.
b[2] # 결과는 5. 꼭 [][]일 필요는 없다.
b[2][0] # 에러가 발생. TypeError: 'int' object is not subscriptable
# 중첩 리스트의 변경
a[0] = 'z'
b # [['z', 2, 3], 4, 5, 6]. a의 값이 달라지면 b도 바뀐다.
### 리스트의 슬라이싱
# 리스트의 슬라이싱
a=['a','b','c',' ','d','e']
a[1:3] # ['b', 'c']. 위의 문자열 슬라이싱과 동일
a[1:4] # ['b', 'c', ' ']. 공백 또한 문자열로 인식되어 잘 출력된다.
a[1:] # ['b', 'c', ' ', 'd', 'e']. 문자열 슬라이싱과 동일하게 끝을 지정하지 않으면 끝까지 출력된다.
a[:3] # ['a', 'b', 'c']. 문자열 슬라이싱과 동일하게 시작을 지정하지 않으면 맨 앞을 시작으로 지정한다.
a[:] # ['a', 'b', 'c', ' ', 'd', 'e']
a[0:6:2] # ['a', 'c', 'd']. 스텝 적용도 똑같다.
a[::2] # ['a', 'c', 'd']
a[::-1] # ['e', 'd', ' ', 'c', 'b', 'a']. 스텝에 따라 역순으로 출력되는 것도 동일
# 리스트 원소의 슬라이싱
a=['파이썬','자바',123,1234]
a[0:2]=[100,200] # a의 인덱스 번호 0,1의 값을 100,200로 바꿨다.
a # [100, 200, 123, 1234]. 바뀐 것을 확인.
a[0:1]=[1,2,3] # 크기가 다른 경우에도 좌측의 값은 무조건 다 들어간다. 이 경우 인덱싱 번호 0번에만 들어가게 된다.
a # [1, 2, 3, 200, 123, 1234]
a[0:2]=[0,0,0] # 이런 경우 [1,2]가 [0,0,0]으로 치환된다. 일종의 리스트의 덧셈이라고 생각하면 된다.
a # [0, 0, 0, 3, 200, 123, 1234]
a[0:3] = [1,2] # 좌측이 더 작아도 규칙은 동일하게 적용된다. [0,0,0]이 [1,2]로 치환된다.
a # [1, 2, 3, 200, 123, 1234]
a[0:3] =[] # 이건 앞의 [1,2,3]을 []로 치환하는 과정이므로 삭제라고 볼 수 있다.
a # [200, 123, 1234]
# 리스트 원소에 대한 슬라이스 삽입
a=[10,20,30,40]
a[1:1]=[1,2] # 위에서 본 단순한 치환이 아닌 삽입을 위해서는 들어갈 위치를 [n:n]으로 지정해줘야 한다.
a # [10, 1, 2, 20, 30, 40]
a[:0] = a # a[:0]은 a의 맨 끝 []을 말한다. 출력값도 a[:0] = []이다. 즉, 맨 끝에 a를 넣는다는 말.
a # [10, 1, 2, 20, 30, 40, 10, 1, 2, 20, 30, 40]
# del을 이용한 슬라이싱. 잘 모르겠으면 del을 빼고 실행했을 때 나오는 출력값을 삭제한다고 생각하면 된다.
a=[1,2,3,4]
del a[:-1] # 의미는 a의 시작 인덱스부터 -1 전까지 전부 삭제한다는 뜻.
a # [4]
a=[1,2,3,4]
a[::2] # [1, 3]
del a[::2] # 이 경우에는 스텝을 적용한 숫자들만 삭제된다.
a # [2, 4]
del a # 리스트 자체를 삭제
a # NameError: name 'a' is not defined
# 패킹과 언패킹. 패킹은 원래 리스트의 속성이고 언패킹은 리스트의 각 요소들을 다른 객체에 배분하는 과정이다.
a = [1, 2, 'hello']
x, y, z = a # a의 각 인덱스에 x,y,z를 대입하여 값을 저장한다.
x # 1
y # 2
z # 'hello'
a = [1,2,3,4]
x,y,z = a # 언패킹을 하기 위해서는 동일한 갯수가 필요하다. ValueError: too many values to unpack (expected 3)
========================== Python ==========================
'프로그래밍 > Python, R 프로그래밍' 카테고리의 다른 글
[R] R 6일차 (0) | 2018.05.17 |
---|---|
[Python] Python 5일차 (0) | 2018.05.16 |
[R] R 5일차 (0) | 2018.05.16 |
[Python] Python 4일차 - 1 (0) | 2018.05.15 |
[Python] Python 3일차 (0) | 2018.05.14 |