[Python]시퀀스(Sequence)
파이썬의 시퀀스(Sequence)에 대해 알아보자
# 시퀀스형 자료형 # 컨테이너(Container : 서로다른 자료형 저장[list, tuple, collection.deque]) # 플랫(Flat : 동일한 자료형[str, bytes, bytearray, array.array, memoryview]) # 가변(list, bytearray, array.array, memoryview, deque]) # 지능형 리스트(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) 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]) print() ''' 출력결과 [33, 64, 35, 36, 33, 35, 37, 35, 37, 94, 38, 37, 38, 42, 40, 38, 42, 40, 41] [33, 64, 35, 36, 33, 35, 37, 35, 37, 94, 38, 37, 38, 42, 40, 38, 42, 40, 41] [64, 94, 42, 42, 41] [64, 94, 42, 42, 41] ['!', '@', '#', '$', '!', '#', '%', '#', '%', '^', '&', '%', '&', '*', '(', '&', '*', '(', ')'] ['!', '@', '#', '$', '!', '#', '%', '#', '%', '^', '&', '%', '&', '*', '(', '&', '*', '(', ')'] ['@', '^', '*', '*', ')'] ['@', '^', '*', '*', ')'] ''' # Generator 생성 import array # Generator : 한 번에 한 개의 값을 생성(메모리 사용량 최소화) tuple_g = (ord(s) for s in chars) array_g = array.array('I', (ord(s) for s in chars)) print(next(tuple_g)) # 값을 1개씩 다음 데이터를 가져온다. print(next(tuple_g)) print(type(array_g)) print(array_g.tolist()) print() '''출력결과 33 64 <class 'array.array'> [33, 64, 35, 36, 33, 35, 37, 35, 37, 94, 38, 37, 38, 42, 40, 38, 42, 40, 41] ''' # Generator 예제 print('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1, 5)) for s in (c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1, 5)): print(s) ''' 출력결과 <generator object <genexpr> at 0x0000025DDF0520A0> A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4 ''' ## 리스트 사용 시 주의사항 marks1 = [['@'] * 3 for _ in range(4)] marks2 = [['@'] * 3] * 4 print(marks1) print(marks2) # 값 수정 marks1[0][1] = 'X' marks2[0][1] = 'X' print(marks1) print(marks2) print([id(s) for s in marks1]) # 리스트가 모두 새로 생성됨 print([id(s) for s in marks2]) # 1개의 리스트가 복사됨 ''' 출력결과 [['@', '@', '@'], ['@', '@', '@'], ['@', '@', '@'], ['@', '@', '@']] [['@', '@', '@'], ['@', '@', '@'], ['@', '@', '@'], ['@', '@', '@']] [['@', 'X', '@'], ['@', '@', '@'], ['@', '@', '@'], ['@', '@', '@']] [['@', 'X', '@'], ['@', 'X', '@'], ['@', 'X', '@'], ['@', 'X', '@']] [2602200031680, 2602200031488, 2602200031424, 2602200031296] [2602200031232, 2602200031232, 2602200031232, 2602200031232] '''
최신 댓글