리스트에 대한 내용이다.

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

+ Recent posts