- 컨테이너 타입 자료형(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))
# Comprehending Lists
code_list2 = [ord(s) for s in chars]
# Comprehending Lists + Map, Filter 조건을 추가해서 필터링 가능
# 속도 약간 우세
code_list3 = [ord(s) for s in chars if ord(s) > 40]
code_list4 = list(filter(lambda x : x > 40, map(ord, chars)))
# 전체 출력
print(code_list1)
print(code_list2)
print(code_list3)
print(code_list4)
# [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]
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])
# ['+', '_', ')', '(', '*', '&', '^', '%', '$', '#', '@', '!', '~', ')']
# ['+', '_', ')', '(', '*', '&', '^', '%', '$', '#', '@', '!', '~', ')']
# ['+', '_', ')', '*', '^', '@', '~', ')']
# ['+', '_', ')', '*', '^', '@', '~', ')']
Generator 생성 및 출력
# Generator 생성
import array
a = [ord(s) for s in chars]
print('type(a):', type(a))
print('a: ', a)
# type(a): <class 'list'>
# a: [43, 95, 41, 40, 42, 38, 94, 37, 36, 35, 64, 33, 126, 41]
# Generator : 한 번에 한 개의 항목을 생성(메모리 유지X)
tuple_g = (ord(s) for s in chars)
# Array
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(type(array_g))
print(array_g)
print(array_g.tolist())
# <class 'generator'>
# 43
# <class 'array.array'>
# 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 샘플 코드
# 제네레이터 예제
# test = (chr(s) for s in code_list2)
# 리스트로 구현한 경우
print([t for t in (chr(s) for s in code_list2)])
# ['+', '_', ')', '(', '*', '&', '^', '%', '$', '#', '@', '!', '~', ')']
# generator
print(('%s' % (chr(s) for s in code_list2)))
# <generator object <genexpr> at 0x7f946008cf90>
print(('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1,11)))
# <generator object <genexpr> at 0x7f946008cf90>
for s in ('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1,4)):
print(s, end=', ')
# A1, A2, A3, B1, B2, B3, C1, C2, C3, D1, D2, D3, %
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()
# 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
b = {1, 2, 3}
print('type(b): ', type(b))
print('B: ', b)
# type(b): <class 'set'>
# B: {1, 2, 3}
# set_iterator
b_iter = b.__iter__()
print('type(b_iter): ', type(b_iter))
print('b_iter: ', b_iter)
print(next(b_iter))
print(next(b_iter))
print(next(b_iter))
# print(next(b_iter)) # 4번째 인자가 없어서 오류 발생
# type(b_iter): <class 'set_iterator'>
# b_iter: <set_iterator object at 0x7fea100d4340>
# 1
# 2
# 3
# Traceback (most recent call last):
# File "/Users/mike/StudioProjects/python/Inflearn-inter/강의+자료/예제 소스 파일/p_chapter04_01.py", line 151, in <module>
# print(next(b_iter))
# StopIteration
b = [1, 2, 3]
print('type(b): ', type(b))
print('B: ', b)
# type(b): <class 'list'>
# B: [1, 2, 3]
# list_iterator
b_iter = b.__iter__()
print('type(b_iter): ', type(b_iter))
print('b_iter: ', b_iter)
print(next(b_iter))
# type(b_iter): <class 'list_iterator'>
# b_iter: <list_iterator object at 0x7fb2f808fe20>
# 1
깊은 복사 & 얕은 복사
참고할 사이트 : https://wikidocs.net/16038
# 리스트 주의, 깊은 복사 얕은 복사 리스트 주의, 깊은 복사 얕은 복사
# mutable - shallow copy 주의할 것.
# 깊은 복사
marks1 = [['~'] * 3 for n in range(3)]
# 얕은 복사
marks2 = [['~'] * 3] * 3
print(marks1)
print(marks2)
# [['~', '~', '~'], ['~', '~', '~'], ['~', '~', '~']]
# [['~', '~', '~'], ['~', '~', '~'], ['~', '~', '~']]
# 수정
marks1[0][1] = 'X' # 깊은 복사
marks2[0][1] = 'X'
print(marks1)
print(marks2)
# [['~', 'X', '~'], ['~', '~', '~'], ['~', '~', '~']]
# [['~', 'X', '~'], ['~', 'X', '~'], ['~', 'X', '~']]
# 증명, 깊은복사인지 얕은복사인지 확인시 id() 로 확인할 것
print([id(i) for i in marks1]) # 깊은 복사
print([id(i) for i in marks2])
# [140478314542848, 140478314542656, 140478314542592]
# [140478314542400, 140478314542400, 140478314542400]
'Python > Intermediate' 카테고리의 다른 글
[Python] 고급 - Dict 및 Set(1) (0) | 2021.05.23 |
---|---|
[Python] 고급 - 리스트 및 튜플(2) - Sequence(2) (0) | 2021.05.23 |
[Python] NamedTuple - Magic Method(3) (0) | 2021.05.21 |
[Python] Magic Method(2) (0) | 2021.05.21 |
[Python] Magic Method(1) (0) | 2021.05.21 |