- 컨테이너 타입 자료형(Container : 서로다른 자료형[list, tuple, collections.deque],
a = [3, 3.5, 'a'] # 서로 다른 자료형, 컨네이너 타입 자료형
- Flat : 한 개의 자료형[str, bytes, bytearray, array.array, memoryview])
한개의 자료형만 저장, 빠름, 자연어 처리, 숫자, 이산, 회계분석, 기상데이터 등 단일 형태의 연산
- 가변(list, bytearray, array.array, memoryview, deque)
- 불변(tuple, str, bytes)
# 지능형 리스트(Comprehending Lists)
# Non Comprehending Lists
chars = '+_)(*&^%$#@!~)'
code_list1 = []
for s in chars:
# 유니코드 리스트
code_list1.append(ord(s))
print(code_list1)
# Comprehending Lists
code_list2 = [ord(s) for s in chars]
print(code_list2)
# Comprehending Lists + Map, Filter
# 속도 약간 우세
code_list3 = [ord(s) for s in chars if ord(s) > 40]
print(code_list3)
code_list4 = list(filter(lambda x : x > 40, map(ord, chars)))
print(code_list4)
print(list(map(ord, chars)))
--------------------------------------------[result]
[43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41]
[43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41]
[43, 95, 41, 42, 94, 64, 126, 41]
[43, 95, 41, 42, 94, 64, 126, 41]
[43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41]
# 전체 출력
print(code_list1)
print(code_list2)
print(code_list3)
print(code_list4)
print([chr(s) for s in code_list1])
print([chr(s) for s in code_list2])
print([chr(s) for s in code_list3])
print([chr(s) for s in code_list4])
--------------------------------------------[result]
[43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41]
[43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41]
[43, 95, 41, 42, 94, 64, 126, 41]
[43, 95, 41, 42, 94, 64, 126, 41]
['+', '_', ')', '(', '*', '&', '^', '%', '$', '#', '@', '!', '~', ')']
['+', '_', ')', '(', '*', '&', '^', '%', '$', '#', '@', '!', '~', ')']
['+', '_', ')', '*', '^', '@', '~', ')']
['+', '_', ')', '*', '^', '@', '~', ')']
Generator 생성 및 출력
# Generator 생성 , 작은 메모리 조각으로 연속된 데이터를 만들수 있음.
# a = [1,2,3, ..., 100000000] 이렇게 하면 많은 메모리가 필요함.
import array
a = [ord(s) for s in chars]
print('type(a):', type(a))
print('a: ', a)
print()
# Generator : 한 번에 한 개의 항목을 생성(메모리 유지X)
tuple_g = (ord(s) for s in chars) # [] 를 () 변경하면 됨
print('tuple_g: ', tuple_g)
# for i in tuple_g:
# print(i)
# Array, 수치연산에 최적화 되어 있음, numpy 에서 사용함
array_g = array.array('I', (ord(s) for s in chars))
print(type(tuple_g))
#print(tuple_g.tolist()) # gnerator 은 tolist() 없음
print(next(tuple_g))
print(next(tuple_g))
print(type(array_g))
print('array_g: ', array_g)
print(array_g.tolist())
--------------------------------------------[result]
type(a): <class 'list'>
a: [43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41]
tuple_g: <generator object <genexpr> at 0x000001B8EA907BF8>
<class 'generator'>
43
95
<class 'array.array'>
array_g: array('I', [43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41])
[43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41]
Generator 샘플 코드
# 제네레이터 예제
print(('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1,11)))
print('--------------------------------------------------')
for s in ('%s' %c +'-'+ str(n).zfill(2) for c in ['A', 'B', 'C', 'D'] for n in range(1,6)):
print(s, end=' ')
if (s[2:4]=='05'):
print()
--------------------------------------------[result]
<generator object <genexpr> at 0x000001B8E9EB35C8>
--------------------------------------------------
A-01 A-02 A-03 A-04 A-05
B-01 B-02 B-03 B-04 B-05
C-01 C-02 C-03 C-04 C-05
D-01 D-02 D-03 D-04 D-05
Iterable & Iterator
참고할 사이트 : https://wikidocs.net/16068
# 1-1 Iterable
# iterable 객체 - 반복 가능한 객체
# 대표적으로 iterable한 타입 - list, dict, set, str, bytes, tuple, range
# for in 반복문, Range, enumerate 에서 iterable한 타입을 확인하는 방법이 있습니다.
# 1-2 Iterator
# iterator 객체 - 값을 차례대로 꺼낼 수 있는 객체입니다.
# iterator는 iterable한 객체를 내장함수 또는 iterable객체의 메소드로 객체를 생성할 수 있습니다.
b = {1, 2, 3}
print(type(b))
print('B: ', b)
print()
b_iter = b.__iter__()
print('type(b_iter): ', type(b_iter))
print('b_iter: ', b_iter)
print(next(b_iter))
print()
b = [1, 2, 3]
print(type(b))
print('B: ', b)
print()
b_iter = b.__iter__()
print('type(b_iter): ', type(b_iter))
print('b_iter: ', b_iter)
print(next(b_iter))
--------------------------------------------[result]
<class 'set'>
B: {1, 2, 3}
type(b_iter): <class 'set_iterator'>
b_iter: <set_iterator object at 0x000001B8EA927F78>
1
<class 'list'>
B: [1, 2, 3]
type(b_iter): <class 'list_iterator'>
b_iter: <list_iterator object at 0x000001B8EA923550>
1
깊은 복사 & 얕은 복사
참고할 사이트 : https://wikidocs.net/16038
# 리스트 주의, 깊은 복사 얕은 복사 리스트 주의, 깊은 복사 얕은 복사
# mutable - shallow copy 주의할 것.
# 깊은 복사
marks1 = [['~'] * 3 for _ in range(4)]
# 얕은 복사
marks2 = [['~'] * 3] * 4
print(marks1)
print(marks2)
print()
# 수정
marks1[0][1] = 'ㅌ '
marks2[0][1] = 'ㅌ '
print(marks1)
print(marks2)
print()
# 증명, 깊은복사인지 얕은복사인지 확인시 id() 로 확인할 것
print()
print([id(i) for i in marks1])
print([id(i) for i in marks2])
--------------------------------------------[result]
[['~', '~', '~'], ['~', '~', '~'], ['~', '~', '~'], ['~', '~', '~']]
[['~', '~', '~'], ['~', '~', '~'], ['~', '~', '~'], ['~', '~', '~']]
[['~', 'ㅌ ', '~'], ['~', '~', '~'], ['~', '~', '~'], ['~', '~', '~']]
[['~', 'ㅌ ', '~'], ['~', 'ㅌ ', '~'], ['~', 'ㅌ ', '~'], ['~', 'ㅌ ', '~']]
[1893721023432, 1893709244488, 1893710125704, 1893710124040]
[1893710125384, 1893710125384, 1893710125384, 1893710125384]
'Python > Intermediate' 카테고리의 다른 글
[Python] 고급 - Dict 및 Set(1) (0) | 2021.05.23 |
---|---|
[Python] 고급 - 리스트 및 튜플(2) (0) | 2021.05.23 |
[Python] NamedTuple (0) | 2021.05.21 |
[Python] Magic Method(2) (0) | 2021.05.21 |
[Python] Magic Method(1) (0) | 2021.05.21 |