[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]

'''

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다