goorm 수업 정리/파이썬
자료구조, 문자열, 정규표현식
yuuuun
2021. 8. 5. 12:17
반응형
자료구조
Stack
- 스택 구조는 기존의 list활용
- 동적 배열이기 때문에 push와 pop이 O(1)
-
>>> a = [1, 10] >>> a.append(4) >>> a.append(20) >>>a.pop() 20 >>>a.pop() 4
Queue
- 큐 구조를 리스트로 만들 경우 시간 복잡도가 매우 오래걸림
>>> a = [1, 10]
>>> a.insert(0, 20)
>>> a.insert(0, 15)
>>> a.pop()
10
>>> a.pop()
1
- linked list 인 collection library의 deque를 사용할 것
>>> from collections import deque
>>> queue = deque([10, 5, 12])
>>> queue.appendleft(16)
>>> queue.pop()
12
>>> queue.append(20)
>>> queue.popleft()
16
>>> queue
deque([10, 5, 20])
>>> queue(reversed(queue))
deque([20, 5, 10])
defaultdict
- python 기본 dictionary는 key가 없을 경우 에러가 생긴다.
from collections import defaultdict
chars = defaultdict(int)
for char in text:
chars[char] += 1
from collections import Counter
text = 'sdfsdfasfdfsdfa'
c = Counter(char for char in text)
>>> c = Counter({"Korean":2, "English": 3})
>>> c
Counter({'English': 3, 'Korean':2})
>>> c.keys()
Dict_keys(['Korean', 'English'])
>>> c.values()
Dict_values([2, 3])
>>> c['Korean']
2
>>> list(c.elements())
['Korean', 'Korean', 'English', 'English', 'English']
- 횟수 더하기, 교집합, 합집합, 차집합 등 가능
Named Tuple
- 데이터가 많아지면 각 위치가 무엇을 의미하는지에 대한 관리가 어려울 수 있음
from collections import namedtuple
Coords3D = namedtuple("Coords3D", ['x', 'y', 'z'])
point = Coords3D(10, 20, z=30)
print(point.x) #10
print(point[1]) #20
print(*point) #10 20 30
# point[1] += 1 #ERROR
Dataclass
from dataclasses import dataclass
@dataclass
class Coords3D:
x: float
y: float
z: float = 0
def norm(self) -> float:
return(self.x ** 2 + self.y ** 2 + self.z ** 2) ** .5
point = Coords3D(10, 20, z=30)
print(point) #Coords3D(x=10, y=20, z=30)
print(point.norm()) #37.416573867739416
String
- 원시 자료형이자, 불변 타입
- 큰 따옴표 혹은 작은 따옴표로 표기
- 따옴표를 3개 연달아 사용할 경우 여러 줄을 넣을 수 있음
- Indexint 및 Slcing이 가능
- 덧셈 및 곱셈이 가능
- in & not in 연산 가능
- tuple과 다소 다르게 작동
- Unicode로 처리
문자 | 설명 |
\ | 다음 줄과 여속임을 표현 |
\\ | \문자 |
\' | '문자 |
\" | "문자 |
\b | 백스페이스 |
\n | 줄바꾸기 |
\t | TAB |
\e | ESC |
함수 형태 | 기능 |
len(string) | 문자 개수 |
string.upper() | 대문자로 변환 |
string.lower() | 소문자로 변환 |
string.capitalize() | 문자열 시작 문자를 대문자로 변환 |
string.title() | 단어 시작을 대문자로 변환 |
string.strip() | 좌우 공백 제거 |
string.lstrip() | 왼쪽 공백 제거 |
string.rstrip() | 오른쪽 공백 제거 |
string.isdigit() | 숫자 형태인지 확인 |
string.isupper() | 대문자로만 이루어져 있는지 확인 |
string.islower() | 소문자로만 이루어져 있는지 확인 |
String Pattern Matching
함수 형태 | 기능 |
string.count(pattern) | 문자열 string 내에 pattern 등장 횟수 반환 |
string.find(pattern) | 문자열 string내에 pattern 첫 등장 위치 반환(앞에서부터) |
string.rfind(pattern) | 문자열 string내에 pattern 첫 등장 위치 반환(뒤에서부터) |
string.startswith(pattern) | 문자열 string이 pattern으로 시작하는지 확인 |
string.endswith(pattern) | 문자열 string이 pattern으로 끝나는지 확인 (확장자 등을 확인할 때 자주 사용됨) |
String Split & Join
함수 형태 | 기능 |
string.split() | 공백을 기준으로 문자열 나누기 |
string.split(pattern) | pattern을 기준으로 문자열 나누기 |
string.join(iterable) | String을 중간에 두고 iterable 원소들 합치기 |
String Formatting
- print할 때 보기 좋게 값을 확인하고 싶을 경우
a, b, c = 10, 1.72, 'sample'
>>> "%d: %f - %s" %(a, b, c)
'10: 1.72 - sample'
>>> "{} : {} - {}".format(a, b, c)
'10: 1.72 - sample'
>>> f"{a}: {b} - {c}"
'10: 1.72 - sample'
padding
>>> "%d + %d + %d" %(1, 10, 100)
'1 + 10 + 100'
>>> "%4d + %4d + %4d" %(1, 10, 100)
' 1 + 10 + 100'
>>> "%-4d + %-4d + %-4d" %(1, 10, 100)
'1 + 10 + 100 '
>>> "%04d + %04d + %04d" %(1, 10, 100)
'0001 + 0010 + 0100'
>>> "%f + %f + %f" %(123.4, 12.34, 1.234)
'123.400000 + 12.340000 + 1.234000'
>>> "%.3f + %.3f + %.3f" % (123.4, 12.34, 1.234)
'123.400 + 12.340 + 1.234'
반응형