본문 바로가기
Language & Tool/Python

🌱Python 주요 공통/문자열/수학/내장 메서드, 함수

by 박수무당벌레 2025. 6. 10.

관련글 :

기본 입출력 함수 정리 + strip, split 비교 https://waydd.tistory.com/30
이중 밑줄 메서드 https://waydd.tistory.com/68
기본 문법 사용 예시 (정렬, 형변환 등) https://waydd.tistory.com/116

 

 

1. 컬렉션 공통 메서드 정리

  의미 사용 가능 자료구조
.copy() 얕은 복사 list, dict, set
.clear() 내용 모두 제거 list, dict, set
.pop() 요소 제거 후 반환 list, dict, set
.len() 길이 반환 list, tuple, set, dict, str, 등
in 포함 여부 (예약어) 모든 시퀀스 및 set, dict(key 존재 여부), range, str 등
__iter__() 반복 가능 객체 list, dict, set, tuple 등
== 값 비교 (연산자) list, dict, set, tuple 등
※ iterable (반복 가능 객체)에 포함되는 것들
- 내장 자료형 : list, tuple, str, set, dict, range
- iterator 객체(반환형 변환 함수들 포함) : enumerate(), map(), filter(), generator 표현식(for문), iter(list)

 

- 위의 컬렉션별 지원 여부 요약

  list dict set
.copy() O O O
.clear() O O O
.pop() O O O
.len() O O O
in O O (키 기준) O

 

 

3. 문자열 전용 메서드

 

- "구분자".join(iterable)

  • str 클래스의 메서드, 리스트 요소를 구분자로 연결하여 문자열로 반환(=결합)
  • iterable은 반드시 문자열(str)로 변환해야함 ex) ",".join(map(str, ["a", 1, "b"]))
    → 내부적으로 문자열 리스트만 연결 가능
  • iterable의 요소가 0, 1개일때는 구분자가 포함되지 않음
  • iterable의 요소가 0개일때는 '' (빈문자열) 반환
words = ["Hello", "world", "Python"]
sentence = " ".join(words)
",".join(["a", "b", "c"])       # 'a,b,c'
"-".join(["2025", "06", "10"])  # '2025-06-10'
"".join(["a", "b", "c"])         # 'abc' (아무 구분자도 없음)

 

- "문자열".split([sep=None, maxsplit=-1])

  • str 클래스의 메서드, 문자열을 구분자로 나누어 리스트로 반환(= 분리)
  • sep(구분자)None 이면 모든 공백 문자(스페이스, 탭, 개행 등 모든 공백)를 기준으로 나눔
  • 연속된 공백도 하나로 취급 → 빈 문자열은 결과에 안들어감
  • maxsplit로 최대 분할 횟수를 설정하면, 지정한 횟수까지만 나누고 나머지는 유지
  • maxsplit가 -1 일때는 나눠지는 만큼 모두 분리 (제한 없음)
s3 = "one-two-three-four"
print(s3.split("-", 2))           # ['one', 'two', 'three-four'] (2번만 나눔)
※ 공백류 범위
스페이스 (' '), 탭 ('\t'), 줄바꿈 ('\n'), 캐리지리턴 ('\r'), 폼피드 ('\x0c'), 수직 탭('\x0b')
→ 인자를 주지 않으면 위를 전부 구분자로 취급
※ 큰 따옴표와 작은 따옴표
- 차이는 거의 없지만 일관성 있게 사용 권장
- 서로 중첩되는 경우 사용 가능 ex) s = 'He said "Hi"'
- 같은 종류를 사용한다면 이스케이프 필요 ex) s = 'It\'s okay'
※ None 과 ''(빈 문자열)
- 둘다 조건문 판단시 False로 반환
- None은 자료형이 NoneType(null에 해당), ''은 길이가 0인 str

 

- "문자열".startswith(prefix[, start[, end]])

  • 주어진 접두사(prefix)로 시작하는지 확인 (True 또는 False 반환)
  • 범위 지정 가능 (start, end)
"hello world".startswith("hello")         # True
"hello world".startswith("world", 6)      # True

 

- 위를 제외한 정리표

"문자열".endswith(suffix[, start[, end]]) 주어진 접미사(suffix)로 끝나는지 확인 (True 또는 False 반환)
"문자열".strip([chars]) 양쪽 끝 문자 제거 (공백 또는 지정 문자)
"문자열".replace(old, new[, count]) 문자열 내 특정 부분을 다른 문자열로 교체
count를 지정하면 그 횟수만 교체
"문자열".find(sub[, start[, end]]) 지정 문자열(sub)의 첫 인덱스를 반환 (없으면 -1)
"문자열".count(sub[, start[, end]]) 지정 문자열 등장 횟수 세기
"문자열".isdigit() / "문자열".isalpha() 문자열이 숫자/알파벳 으로만 구성되어 있는지 확인 (True 또는 False 반환)

 

 

4. 수학 함수

  • 같은 기능을 제공하는 경우, 기본적으로 "내장함수 → 연산자 → 외부 모듈 함수" 순으로 빠름
  • 꼼수가 아닌 진짜 수학적 의미로 정확한 값을 구하고 싶다면, 연산자나 math 모듈 사용 권장

 

- 수학 처리 연산자

  설명 반환 타입
/ 실수 나눗셈   float (정수끼리 계산해도 float로 형변환됨)
// 내림 나눗셈 (몫 연산 후 내림) float
% 나머지 (피제수의 부호를 따르기 때문에 음수일 때 주의) int
** 제곱 (음수 지수도 허용, 결과는 소수) int or float
※ 단순 내림 연산(floor)를 원한다면 x // 1 (단, 실수를 반환)
※ 올림 직접 구현 : (n - 1) // d + 1 또는 -(-n // d)
※ 제자리 연산 (in-place)
n = n // 2 (일반 대입) 보다 n //= 2 (제자리 연산 = 직접 수정)이 약간 더 빠르다 (코드 간결 + 가독성은 덤)
※ 제자리 연산 주의사항 (예시 포함)
- 삼항 연산의 결과는 오른쪽 전체가 대입되는데 제자리 연산을 사용하는 것은 문맥상 허용되지 않음 (문법 오류)
- //= 뒤에 오는 내용은 단순 숫자만 기대하지만 Python이 코드를 해석하려고 시도할 때, 조건식을 어떻게 적용해야 할지 명확하지 않다고 판단하여 문법 오류(SyntaxError)가 남
  n = n // 2 if n % 2 == 0 else n * 1 → 가능
  n //= 2 if n % 2 == 0 else n * 1 → 불가능

 

- 내장(built-in) 함수

  설명 반환 타입
abs(x) 절댓값 int or float
sum(iterable[, start=0]) 총합 (합계) int or float
round(x[, ndigits]) 짝수 쪽 반올림 (소수 n자리까지) int or float
pow(x, y[, z]) 거듭제곱 (x^y), z 지정 시 x^y % z int or float
max(iterable, *, key=None, default) 최댓값 (동일하다면 가장 먼저 참조한 항목 반환) 입력값에 따라 (int, str 등)
min(iterable, *, key=None, default) 최솟값 (동일하다면 가장 먼저 참조한 항목 반환) 입력값에 따라
divmod(a, b) (몫, 나머지) tuple
int(x, base) 정수로 변환 (base는 진수)
또는 소수점 버림 (0 방향으로)
int
float(x) 실수로 변환 float
※ Python의 정렬 함수 (key=...)
- 매개변수 key는 iterable의 각 요소를 넣었을 때 비교 기준값을 반환하는 함수여야 함 → len("123"), d.get(key) 이런 형식
- 둘다 동일하게 딕셔너리는 key 기준 반환

 

- math 모듈을 통해 제공되는 함수

  • 기초 수학 함수용 모듈 (삼각함수, 로그, 제곱근 등)
  • 순수 파이썬, C로 구현되어 빠름
  설명 반환 타입
math.sqrt(x) √x, 제곱근 float
math.pow(x, y) x^y (실수 거듭제곱) float
math.log(x) / math.exp(x) 자연로그(= 밑이 e(≈2.718)인 로그) ln(x)
/ 지수함수(= 로그의 역함수 = e를 x번 곱한 값)  e^x
float
ex) math.log(e) → 1.0
math.exp(1) → e ≈ 2.718
math.trunc(x) 소수점 버림 int
math.floor(x) 내림 (음수 방향으로 소수점 버림)
ex) -3.9 → -4
int
math.ceil(x) 올림 int
math.factorial(x) x! (정수 팩토리얼) int
math.gcd(a, b) 최대공약수 (Python 3.5+) int
math.lcm(a, b) 최소공배수 (Python 3.9+) int
math.isqrt(x) 정수 제곱근 (int) int
math.copysign(x, y) x의 절댓값에 y의 부호 적용 float
math.isfinite(x) 유한한 값이면 True bool
math.isinf(x) 무한대 여부 bool
math.isnan(x) NaN 여부 bool
# gcd, lcm 직접 구현
def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

def lcm(a, b):
    return abs(a * b) // gcd(a, b)

 

- 상수

  출력값 의미 타입
math.pi 3.141592653589793 원주율 π float
math.inf or float('inf') inf 양의 무한대, 
음의 무한대를 원하면 -(마이너스) 부호 추가
float
math.nan nan 수학적으로 정의되지 않은 값
(Not a Number)
float

 

 

5. 내장 함수

 

(공통) iterator를 반환하는 함수들은 전체 계산값들을 print로 출력할때 list를 사용함 (그 자체는 객체 자체 메모리 주소를 출력함)

  • 함수로 리스트가 바로 만들어지는 것이 아니라(결과를 미리 계산해서 저장 X), 
    필요할 때마다 하나씩 계산해서 주는 방식 lazy(지연 평가) 방식의 반복자가 반환되기 때문 메모리 효율적
  • range 함수는 지연 평가 기반의 iterator를 반환함, iter()를 통해 반복자로 변환 가능
※ 지연 평가
- 리스트의 경우  
  lst = [x * 2 for x in range(3)]  # 계산이 즉시 전부 수행, 결과가 리스트에 저장됨
- 지연평가 기반의 반복자를 사용하는 경우  
  m = map(lambda x: x * 2, range(3))
  print(m) # <map object at ...> ← 결과가 보이지 않음
  print(next(m)) # 0 (이때 계산됨)  
  print(next(m)) # 2 (이때 계산됨) 

 

- print

  • 표준 출력 장치(보통 콘솔)에 문자열이나 값을 출력 (반환값은 None = 없음)
  • 출력할 값이 여러개일때, 값 사이 구분자로 구분 가능(sep), 출력 후 끝에 붙을 문자열을 지정할 수 있음(end)
  • file: 출력 대상, flush: 버퍼를 강제로 비울지 여부 (기본 False)
표현식 : print(*objects[, sep=' ', end='\n', file=sys.stdout, flush=False])

 

- len

  • 길이나 크기를 갖는 객체 (iterable 혹은 container)에 사용 가능 (길이 개념(length)이 없는 int, float, bool 같은 자료형에는 에러 발생)
  • range도 범위 내 숫자 개수를 반환하는 형태로 사용 가능
  • 딕셔너리의 경우엔 key 개수 반환
표현식 : length = len(iterable)
# 예시
a = 312
print(len(str(a)))
※ iterable(반복 가능 객체)와 container(컨테이너 객체)
- iterable : 말 그대로 반복할 수 있는 객체로, 내부에서 값을 하나씩 꺼내는 기능 중심 (__iter__, __getitem__)
  (for문에 사용 가능)
- container : 특정값들을 내부에 포함하고 있는지 검사 ( __contains__) (in 연산자에 사용됨)
- 모든 컨테이너는 보통 iterable이지만, 모든 iterable은 container가 아님
모든 iterator는 iterable이다
iterator는 __next__(=다음 값 꺼내기), __iter__(=자기 자신 반환) 메서드를 포함하고 있는데 __iter__()를 가지고 있으므로 iterable이기도 함

 

- range

  • 일정한 간격의 정수 시퀀스(순서열)를 생성하는 iterable 객체 (이터러블, 반복자 아님)
    지연 평가 방식을 사용하여 필요한 순간에만 값을 계산해주는 시퀀스 객체, range(1, 1000000)처럼 커도 메모리를 거의 쓰지 않음
  • 주로 for 반복문에서 많이 사용
표현식 : range 객체(iterable) = range([start,] stop[, step])
※ 입력 인자 조합에 따른 동작 방식
- range(stop) : 0부터 stop 직전까지의 정수 생성
- range(start, stop) : start부터 stop 직전까지 생성
- range(start, stop, step) : start부터 stop 직전까지 step 간격으로 생성

 

- iter

  • iterable 객체에서 __iter__를 호출해서 해당 객체의 값들을 순서대로 꺼낼 수 있는 반복자(iterator) 생성, 반환
  • 생성된 반복자는 객체의 첫 번째 요소를 가리키는 상태로 요소를 출력하지는 못함
기본형 : iterator = iter(iterable)
확장형 : iterator = iter(callable, sentinel)
# 예시
it = iter(range(3))
print(next(it))  # 0
print(next(it))  # 1
※ 반복자 (iterator)
- 포인터처럼 값을 순차적으로 접근한다는 점은 동일
- But. 포인터처럼 값을 직접 가리키는 주소가 아니라 현재 위치 상태를 기억하는 객체
- 또한 iterator는 iterable의 한 종류
※ 확장형 추가 설명
- 기본형과 달리 iterable이 아닌 호출 가능한 함수 input, f.readline, random() 을 요구
- 호출될 때마다 값을 생성해서 sentinel 값을 만나면 종료하는 방식

 

- next

  • 반복자로부터 __next__를 호출해서 반복자의 다음 값(int, str, 등의 value)을 반환
    →→  반복자가 기억하는 위치에서 값을 반환하고 그 이후 iterator 내부 상태를 자동으로 다음 위치로 이동
  • iterator 에서 더 이상 꺼낼 값이 없을때 대신 반환할 기본값을 지정할 수 있음 (생략 가능) 
기본형 : next(iterator) (iterator 범위벗어나면 에러발생)
확장형 : next(iterator, default)
※ next(iterator) 가 왜 오류가 발생하는지?
- iterator는 일회용으로, 내부적으로 커서(pointer)를 가지고 있음
- next()가 호출될 때마다 커서를 한 칸씩 앞으로 이동
- 하지만 더 이상 꺼낼 값이 없을 때, StopIteration이라는 예외를 발생
※ next() vs 단순 인덱싱 접근 비교
- next() 호출 비용이 [] 인덱싱보다 비쌈 (= 함수 호출 오버헤드) → 실행시간 더 김
- 순회하면서 인덱스를 사용할 수 있다면 인덱싱 권장 

 

- enumerate

  • iterable 객체를 반복하면서 인덱스와 값을 동시에 꺼내주는 함수로 반복자(iterator) 객체를 반환
    (= 인덱스를 붙인 (index, value) 쌍을 반복에서 꺼냄)
  • start 매개변수로 인덱스를 몇부터 시작할지 지정할 수 있음
  • 주로 for문이나 내장 생성자 함수 list와 함께 쓰인다
표현식 : enumerate 객체(iterator) = enumerate(iterable[, start=0])
# 예시
for i, fruit in enumerate(fruits):

 

- map

  • 함수와 iterable을 받아 각 요소에 함수 적용한 결과인 반복자(iterator) 객체 반환
  • lambda 함수와 자주 함께 사용되며, filter()가 반환한 iterator로 조건을 걸고 map 변환이 가능함
  • 소문자↔대문자 변환 / max, min / 생성자 함수를 사용해서 문자열이나 해당 자료형으로도 변환 가능
  • 주로 리스트 컴프리헨션으로 코드의 간략화에 사용
표현식 : map 객체(iterator) = map(function, iterable)
# 예시
map(str, [1,2,3])` # `['1','2','3']
※ 리스트 2개 동시에 처리도 가능 (함수는 매개변수 2개 필요)
  a = [1, 2, 3]
  b = [10, 20, 30]
  sum_list = list(map(lambda x, y: x + y, a, b)) # [11, 22, 33]

 

- filter

  • 함수와 iterable을 받아 조건을 만족하는 요소만 필터링한 반복자(iterator) 객체 반환
  • lambda 함수와 함께 조건 필터링에 자주 사용
  • 불리언 컨텍스트 기반으로 list나 문자열의 공백같은 특정값을 제거할 수 있음
표현식 : filter 객체(iterator) = filter(function, iterable)

 

- any / all

  • iterable 중 하나라도 True이면 True 반환 / iterable 모두가 True여야 True 반환
  • iterable = 논리값들의 시퀀스
표현식 : any(iterable) / all(iterable)
※ 불리언으로 평가되는 값
0, '', [], None

 

- zip

  • 여러 iterable을 받아 병렬로 튜플로 묶어서 반환
  • 즉, 가장 짧은 iterable 길이를 기준으로 짝지으며 반복자가 반환됨
  • 관련글 : https://waydd.tistory.com/31
표현식 : zip 객체(iterator) = zip(iter1, iter2, ...)
# 예시
zip([1,2],[‘a’,’b’]) # (1,'a'), (2,'b')

 

- sorted

  • iterable을 정렬해서 새로운 리스트로 반환됨 (쓰인 원래 iterable은 변경되지 않음)
  • 관련글 : https://waydd.tistory.com/38

 

- reversed

  • iterable 중 시퀸스(sequence)역순으로 접근하는 반복자(iterator) 반환 (정렬 아님)
  • 리스트, 튜플, 문자열 등 정해진 길이가 있는 시퀀스 자료형만 사용 가능
표현식 : reversed 객체(iterator) = reversed(seq)
# 예시
list(reversed([1,2,3])) # [3,2,1]
※ 왜 sequence 객체만 매개변수로 받을 수 있을까? 
- 길이가 있고 인덱싱이 가능한 자료형만 가능(시퀀스 프로토콜 지원 객체) ex) list, tuple, str, range
- iterator, 집합, generator는 사용 불가
- reversed는 내부적으로 __len__(), __getitem__() 두 메서드 혹은 또는__reversed__() 메서드가 구현된 객체로 작
- 허용되는 타입이 아 경우, 리스트로 먼저 변환 후 reversed 사용하는 방법으로 우회 가능 → reversed(list(iterable))
※ 유사 함수 비교
- sorted(test, reverse=True)  # 정렬 후 뒤집어서 반환
- test[::-1]  # 리스트의 슬라이싱 으로 역순 생성, reversed와 기능 동일(= 새로운 리스트 복사본 반환, 원본 안바뀜) 
- test.reverse()  # 제자리(in-place) 연산, 반환값  None(리스트 자체가 바뀜), 복사 안함 (메모리 효율적, 약간 더 빠름)

 

- eval

  • 문자열 형태의 Python 표현식을 실행해서 그결과를 반환
  • globals는 전역 이름 공간, locals는 지역 이름 공간을 지정할 수 있음 
    이름 해석 시 탐색 순서 : locals → globals → 내장 (기본 : 호출된 위치의 전역 변수 및 지역 변수 스코프를 따름)
  • 함수 호출도 가능, 컴파일된 코드보다 느릴 수 있음 (내부적으로 파서/인터프리터 호출 발생)
  • 성능보다는 동적 실행이 필요한 경우 사용되지만,
    악의적인 코드도 실행이 가능하기 때문에 외부 입력을 받아 사용하는 것은 권장 X
표현식 : eval(expression[, globals=None, locals=None])