Dev

[DevOps] 1. DevOps 파이썬 핵심 - 2) 시퀀스

mlslly 2024. 4. 25. 20:26

맨 처음 파이썬 설치 부터 보려면 https://ysryuu.tistory.com/27

 

[DevOps] 1. DevOps를 위한 파이썬 핵심 (설치, 제어문, 내장객체)

Python 설치 및 실행- 파이썬 버전 확인 $ python3 --version - 파이썬 실행 및 종료$ python3>>> exit() - 파이썬 스크립트 실행 : 확장자 .py 파일$ python3 Hello.py - pip 업그레이드 $ pip3 install --upgrade pip - Ipyth

ysryuu.tistory.com

 

시퀀스 

시퀀스란 리스트, 튜플, 범위, 문자열, 바이너리 등을 포함하는 내장데이터 타입으로, 순서가 있는 유한한 집합

 

[시퀀스 기본 연산]

 

- in/ not in

in/not in 으로 특정 항목의 시퀀스 내 존재 여부 확인 

>>> 2 in [2,3,4]
True

>>> 10 in range(12)
True

>>> 10 not in range(2,4)
True

 

- index 활용

인덱스 번호 이용 내용 참조 

>>> my_sequence = 'Bill chatham'

>>> my_sequence[0]
'B'

>>> my_sequence[-2]
'a'

>>> my_sequence.index('c')
5

>>> my_sequence.index('a',9,12) # 특정 범위 내에서 찾아라
10

 

- 슬라이싱

sequence[start:stop:step]으로 특정 구간만 표시 가능

>>> my_sequence = ['a','b','c','d','e']

>>> my_sequence[:3]
['a', 'b', 'c']

>>> my_sequence[2:5]
['c', 'd', 'e']

>>> my_sequence[4:]
['e']

 

- len, min, max, count

>>> my_sequence = [0,1,2,0,1,2,3,0,1,2,3,4]

>>> len(my_sequence)
12

>>> min(my_sequence)
0

>>> max(my_sequence)
4

>>> my_sequence.count(1)
3

 


[시퀀스 유형]

 

1) 리스트 시퀀스 

파이썬에서 가장 많이 쓰이는 자료 구조. 어떤 타입의 항목이든 정렬된 집합을 나타냄

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> list('Henry Miller')
['H', 'e', 'n', 'r', 'y', ' ', 'M', 'i', 'l', 'l', 'e', 'r']

>>> empty = []
>>> empty
[]

 

- 리스트에 더하기 : append, insert, extend

>>> pies = ['cherry','apple']
>>> pies
['cherry', 'apple']

# append : 맨 뒤에 더하기
>>> pies.append('walnut')
>>> pies
['cherry', 'apple', 'walnut']

# insert : 특정 index에 더하기 
>>> pies.insert(1,'cream')
>>> pies
['cherry', 'cream', 'apple', 'walnut']

# extend : 전체 리스트를 확장하기
>>> dessert = ['cookies','paste']
>>> dessert.extend(pies)
>>> dessert
['cookies', 'paste', 'cherry', 'cream', 'apple', 'walnut']

 

- pop, remove

>>> pies
['cherry', 'cream', 'apple', 'walnut']

# pop : 마지막 항목을 삭제하고, 해당 항목을 반환함. 삭제 이후 리스트 갱신
>>> pies.pop()
'walnut'
>>> pies
['cherry', 'cream', 'apple']

# 지정 위치 pop : 해당 인덱스틔 항목을 삭제하고, 해당 항목을 반환함. 삭제 이후 리스트 갱신
>>> pies.pop(1)
'cream'
>>> pies
['cherry', 'apple']

# remove : 지정 항목이 리스트에 있는 경우 '첫번째로 나타난 항목을' 삭제함. 삭제 이후 리스트 갱신
>>> pies.pop(1)
>>> pies.remove('apple')
>>> pies
['cherry']

 

- 리스트 컴프리헨션 comprehension 

for 문의 기능을 한줄로 사용 가능하게 만들어줌 

# for 문의 예시
>>> for i in range(10) : 
...     squared = i*i
...     squares.append(squared)
... 
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# list comprehension 으로 구현시
>>> squares = [i*i for i in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# list comprehension에 조건 적용시
>>> squares = [i*i for i in range(10) if i%2 ==0]
>>> squares
[0, 4, 16, 36, 64]

2) 문자열 시퀀스 

따옴표로 둘러쌓인 순서를 갖는 문서들의 집합

>>> str()
''

>>> "some new string"
'some new string'

>>> 'or with single quotes'
'or with single quotes'

>>> my_list = list()
>>> str(my_list)
'[]'

>>> multi_line = """This is a 
... multi line string, 
... which includes linebreakes
... """
>>> print(multi_line)

This is a 
multi line string, 
which includes linebreakes

 

- strip, lstrip, rstrip  : 공백 제거 

>>> input = '  I want more  '
# 전체 공백 제거
>>> input.strip()
'I want more'

# 오른쪽 공백 제거
>>> input.rstrip()
'  I want more'

# 왼쪽 공백 제거
>>> input.lstrip()
'I want more  '

 

- rjust, ljust : 공백 생성 및 패딩

>>> output = 'Barry'

# 오른쪽 패딩
>>> output.ljust(10)
'Barry     '

# 왼쪽 패딩
>>> output.rjust(10)
'     Barry'

# 10칸의 길이만큼 왼쪽 패딩
>>> output.rjust(10, '*')
'*****Barry'

# 20칸의 길이만큼 오른쪽 패딩
>>> output.ljust(20, '-')
'Barry---------------'

 

- split, join : 문자열 나누기, 문자열 합치기 (separator을 기준으로)

# 기본 split : 공백 기준 나누기
>>> text = 'Mary had a little lamb'
>>> text.split()
['Mary', 'had', 'a', 'little', 'lamb']


# 특정 문자 separator 기준으로 나누기
>>> url = 'gt.motommmo.io/v2/api/asset/143'
>>> url.split('/')
['gt.motommmo.io', 'v2', 'api', 'asset', '143']

# join : 문자열 합치기
>>> items= ['cow', 'milk','bread','butter']
>>> ' and '.join(items)
'cow and milk and bread and butter'

 

 

- capitalize, upper, lower, swapcase, title : 대문자 소문자 변경

>>> name = 'bill monroe'

# capitalize : 첫 문자 대문자로 변경
>>> name.capitalize()
'Bill monroe'

# upper : 모두 대문자로 변경
>>> name.upper()
'BILL MONROE'

# title : 단어별 첫 문자를 대문자로 변경
>>> name.title()
'Bill Monroe'

# swapcase : 대소문자를 변경하기 
>>> name.swapcase()
'BILL MONROE'

# lower : 모두 소문자로 변경
>>> name = 'BILL MONROE'
>>> name.lower()
'bill monroe'

 

- startswith, endswith, isalnum, isalpha, isnumeric, istitle, is lower, isupper : 문자의 내용 파악 및 검사 

# startswith : 시작 문자열 검사
>>> 'William'.startswith('W')
True

>>> 'William'.startswith('Bill')
False

# endswith : 끝 문자열 검사
>>> 'Molly'.endswith('lly')
True

# isalnum : 문자열이 알파벳과 숫자로만 이루어져 있는지 검사 
>>> 'abc123'.isalnum()
True

>>> 'abc'.isalnum()
True

# isalpha : 문자열이 알파벳으로만 이루어져 있는지 검사
>>> 'abc123'.isalpha()
False

# isnumeric : 문자열이 숫자로만 이루어져 있는지 검사 
>>> '123'.isnumeric()
True

# istitle : 문자열이 제목 형식으로 되어있는지 검사 
>>> 'Sandy'.istitle()
True

# islower : 문자열이 소문자로만 되어있는지 검사
>>> 'Sandy'.islower()
False

# isupper : 문자열이 대문자로만 되어있는지 검사
>>> 'SANDY'.isupper()
True

 

- 문자열 포매팅 ***

문자열에 변수 등 특수한 값을 삽입할 수 있는 기능

# % 문자열 포매팅
>>> '%s + %s = %s' % (1,2,'Three')
'1 + 2 = Three'

# 소수점 자리수 제한 %
>>> '%.3f' % 1.234567
'1.235'

# .format() 문자열 포매팅 
>>> '{} comes before {}'.format('first', 'second')
'first comes before second'

# index .format() 문자열 포매팅
>>> '{1} comes after {0}, but {1} comes before {2}'.format('first','second', 'third')
'second comes after first, but second comes before third'

# 지정 포매팅
>>> '''{country} is an island.
... {country} is off of the coast of 
... {continent} in the {ocean}'''.format(ocean='Indian Ocean',
... continent='Africa', country='Madagascar')
'Madagascar is an island.\nMadagascar is off of the coast of \nAfrica in the Indian Ocean'

# 딕셔너리 활용 .format() 포매팅
>>> values = {'first':'Bill','last':'Bailey'}
>>> 'Won\'t you come home {first} {last}?'.format(**values)
"Won't you come home Bill Bailey?"

# f-string 포매팅
>>> a = 1
>>> b = 2
>>> f'a is {a}, b is {b}. adding them results in {a+b}'
'a is 1, b is 2. adding them results in 3'

 

- 파이썬 내장함수 string의 Template 사용

 

>>> from string import Template
>>> greeting = Template('$hello Mark Anthony')

>>> greeting.substitute(hello='Bonjour')
'Bonjour Mark Anthony'

>>> greeting.substitute(hello='Annyeong')
'Annyeong Mark Anthony'

>>> greeting.substitute(hello='Nin hao')
'Nin hao Mark Anthony'

3) 딕셔너리 

 

문자열과 리스트를 제외하면 가장 많이 사용되는 시퀀스. key와 value의 매핑

key를 통한 특정 값value의 조회를 빠르게 수행 가능하며, key는 문자열, 숫자, 커스텀 객체, 변경불가 객체 등이 될 수 있음

 

>>> map = dict()
>>> type(map)
<class 'dict'>

# 리스트를 딕셔너리로 만들기 
>>> kv_list = [['key1','value1'],['key2','value2']]
>>> dict(kv_list)
{'key1': 'value1', 'key2': 'value2'}

# 딕셔너리를 지정해서 만들기 
>>> map = {'key1': 'value1', 'key2': 'value2'}
>>> map
{'key1': 'value1', 'key2': 'value2'}

# 특정 key 값을 추출
>>> map['key1']
'value1'
>>> map['key2']
'value2'

# 항목(key-value)을 생성하기 
>>> map['key3'] = 'value3'
>>> map
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

# 항목의 값(value)을 대체하기 
>>> map['key1'] = 13
>>> map
{'key1': 13, 'key2': 'value2', 'key3': 'value3'}

# 없는 값에 대해서 확인
>>> map['key4']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'key4'

>>> if 'key4' in map : 
...     print(map['key4'])
... else : 
...     print('key4 not there')
key4 not there

 

- get, del : 특정 key에 대한 value를 가져오기, key-value 쌍을 제거하기 

# get : 특정 value 가져오기 
>>> map.get('key2')
'value2'

# get : 없는 key값에 대해서는 default value 가져오기
>>> map.get('key4','default-value')
'default-value'

# del : key-value 쌍 삭제하기 
>>> del(map['key1'])
>>> map
{'key2': 'value2', 'key3': 'value3'}

 

 

- keys, values, items : 딕셔너리의 key값, value값, 전체를 가져오기 

>>> map
{'key2': 'value2', 'key3': 'value3'}

# keys : 키값
>>> map.keys()
dict_keys(['key2', 'key3'])

# values : 밸류값
>>> map.values()
dict_values(['value2', 'value3'])

# items : 전체 
>>> map.items()
dict_items([('key2', 'value2'), ('key3', 'value3')])

>>> for key, value in map.items() : 
...     print(f'{key} : {value}')

key2 : value2
key3 : value3

 

- 딕셔너리 컴프리헨션 dictionary comprehension : 반복문 돌리지 않고 한줄 구문으로 시퀀스 반복하여 딕셔너리로 반환

>>> letters = 'abcde'

>>> cap_map = {x: x.upper() for x in letters}
>>> cap_map
{'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D', 'e': 'E'}

>>> cap_map['b']
'B'