- Markdown을 이용해 TIL을 작성하지만 잘 사용해보려고 시도해 본 적은 없었다.
- Markdown Guide가 있으니 앞으로는 이를 참고하여 좀 더 깔끔하게 작성해보자!
- 문서 링크
- 리스트 자료형에 대해 새롭게 알게된 점
- 예전에도 알고리즘 문제를 풀 때 구현은 다 했는데 중간에 꼬이는 경우가 있었음
- 알고보니 list를 복사할 때 문제가 생겨서 copy 모듈을 이용했음
- 당시에는 그런게 있나보다 하고 넘어갔는데 이제 이유를 명확하게 알게 됨
- 예시
>>> a = [1, 2, 3]
>>> b = a
>>> id(a)
2156737012168
>>> id(b)
2156737012168
- 파이썬에서 변수는 객체를 가리키는 것이라고도 말할 수 있음
- a = [1, 2, 3]이라고 하면 [1, 2, 3]이라는 값을 가지는 리스트 자료형(객체)를 메모리에 생성함
- 그리고 변수 a는 메모리에 있는 [1, 2, 3]이라는 리스트가 저장된 메모리의 주소를 가리킴
- 위의 코드처럼 id()를 통해 메모리의 주소를 확인 할 수 있음
>>> a = [1, 2, 3]
>>> b = a
>>> id(a)
2156737012168
>>> id(b)
2156737012168
>>> a is b
True
- 이와 같이 리스트를 복사하면 a와 b는 같은 주소를 가리킴
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 4, 3]
- a 리스트의 두번째 요소를 바꾸었더니 b도 값이 바뀜
- a,b 모두 동일한 리스트를 가리키고 있기 때문
- [:] 이용
>>> a = [1, 2, 3]
>>> b = a[:]
>>> id(a)
2110737424712
>>> id(b)
2110737424520
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]
- copy 모듈 이용
>>> from copy import copy
>>> a = [1, 2, 3]
>>> b = copy(a)
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]
>>> id(a)
2611821784072
>>> id(b)
2611821833800
- 리스트와 다른점은 그 값을 바꿀 수 없다는 점
t2 = (1, )
t4 = 1, 2, 3
- 하나만 선언할 경우 t2와 같이 , 를 써줘야함
- t4와 같이 선언하면 ()를 쓰지 않아도 튜플로 선언됨
- 연관 배열 또는 해시라고도 함
- 리스트나 튜플처럼 순차적으로(sequential)해당 요소 값을 구하지 않는다.
- key를 통해 value를 얻는다.
- key 리스트 만들기
a.keys()
- value 리스트 만들기
a.values()
- key, value 쌍 얻기
a.items()
- key로 value얻기
- 만약 'name' 이라는 key가 없을 경우 None을 반환
a.get('name')
- key가 딕셔너리 안에 있는지 확인
'name' in a
- set 키워드를 이용해 생성함
s1 = set([1, 2, 3])
s2 = set("Hello")
>>> s2
{'l', 'e', 'H', 'o'}
-
s2의 출력결과를 통해 'set'에는 다음과 같은 특징이 있음을 확인
-
중복을 허용하지 않음
-
순서가 없다.
-
교집합 연산
s1 & s2
s1.intersection(s2)
- 합집합 연산
s1 | s2
s1.union(s2)
- 차집합 연산
s1 - s2
s2 - s1
s1.difference(s2)
s2.difference(s1)
- 값 추가하기
s1.add(4)
- 값 여러 개 추가하기
s1.update([4,5,6])
- 특정 값 제거하기
- 없는 값 지우는 경우 error 발생
s1.remove(2)