숫자 다루기
기본 연산자
a, b = 10, 3
print(a + b) # 13 (덧셈)
print(a - b) # 7 (뺄셈)
print(a * b) # 30 (곱셈)
print(a / b) # 3.333... (나눗셈, 항상 float 반환)
print(a // b) # 3 (정수 나눗셈, 몫)
print(a % b) # 1 (나머지)
print(a ** b) # 1000 (거듭제곱)
복합 대입 연산자
count = 100
count += 10 # count = count + 10
count -= 5 # count = count - 5
count *= 2 # count = count * 2
count //= 3 # count = count // 3
숫자 관련 내장 함수
print(abs(-3.5)) # 3.5 (절댓값)
print(round(3.14159, 2)) # 3.14 (반올림, 소수점 자릿수 지정)
print(pow(2, 10)) # 1024 (거듭제곱)
print(max(1, 5, 3)) # 5
print(min(1, 5, 3)) # 1
# 리스트에 적용
values = [4.2, 1.8, 9.5, 3.1]
print(sum(values)) # 18.6
print(max(values)) # 9.5
print(min(values)) # 1.8
math 모듈
더 다양한 수학 함수는 math 모듈을 사용합니다.
import math
print(math.sqrt(144)) # 12.0 (제곱근)
print(math.log(1000, 10)) # 3.0 (로그, 밑 지정)
print(math.log2(8)) # 3.0
print(math.log(math.e)) # 1.0 (자연로그)
print(math.ceil(3.2)) # 4 (올림)
print(math.floor(3.8)) # 3 (내림)
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
# 생물정보학 예시: p-value 보정에서 로그 변환
import math
p_value = 0.0001
log_p = -math.log10(p_value) # 4.0
부동소수점 주의사항
print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # False
부동소수점은 컴퓨터 내부에서 이진수로 표현되는 과정에서 미세한 오차가 생깁니다.
부동소수점을 비교할 때는 == 대신 차이가 허용 범위 안에 있는지 확인하는 방식을 사용합니다.
a = 0.1 + 0.2
print(abs(a - 0.3) < 1e-9) # True
# 또는 math.isclose 사용
print(math.isclose(a, 0.3)) # True
문자열 다루기
문자열은 작은따옴표(')와 큰따옴표(") 모두 사용할 수 있습니다.
여러 줄 문자열은 삼중 따옴표(""" 또는 ''')를 사용합니다.
seq = "ATCGATCG"
sample = 'sample_01'
multiline = """
Sample: sample_01
Species: Homo sapiens
Read count: 15000000
"""
인덱싱과 슬라이싱
문자열은 리스트처럼 인덱싱과 슬라이싱이 가능합니다. 단, 문자열은 불변(immutable)이므로 특정 위치의 문자를 직접 수정할 수 없습니다.
seq = "ATCGATCG"
print(seq[0]) # A
print(seq[-1]) # G
print(seq[2:5]) # CGA
print(seq[::-1]) # GCTAGCTA (역상보 전에 역순 확인 등에 활용)
print(len(seq)) # 8
문자열 메서드
문자열이 제공하는 주요 메서드입니다.
대소문자 변환
gene = "brca1"
print(gene.upper()) # BRCA1
print(gene.lower()) # brca1
print("BRCA1".lower()) # brca1
공백 및 문자 제거
line = " ATCGATCG\n"
print(line.strip()) # "ATCGATCG" (양쪽 공백, 개행 제거)
print(line.lstrip()) # "ATCGATCG\n" (왼쪽만)
print(line.rstrip()) # " ATCGATCG" (오른쪽만)
FASTA나 FASTQ 파일을 파싱할 때 각 줄 끝의 개행 문자(\n)를 제거하는 데 .strip()을 자주 사용합니다.
검색 및 확인
seq = "ATCGATCGATCG"
print(seq.count("AT")) # 3 (부분 문자열 등장 횟수)
print(seq.find("CGA")) # 2 (처음 등장하는 인덱스, 없으면 -1)
print(seq.startswith("ATC")) # True
print(seq.endswith("TCG")) # True
print("AT" in seq) # True
치환 및 분리
seq = "ATCGATCGATCG"
print(seq.replace("AT", "TT")) # TTCGTTCGTTCG
# 문자열 분리
line = "sample_01,Homo sapiens,15000000"
fields = line.split(",")
print(fields)
# ['sample_01', 'Homo sapiens', '15000000']
# 특정 횟수만 분리
fields = line.split(",", 1)
print(fields)
# ['sample_01', 'Homo sapiens,15000000']
# 합치기
genes = ["BRCA1", "TP53", "EGFR"]
print(", ".join(genes)) # BRCA1, TP53, EGFR
print("\t".join(genes)) # BRCA1 TP53 EGFR (탭 구분)
문자열 포맷팅
변수 값을 문자열 안에 삽입하는 방법은 여러 가지입니다.
f-string (권장)
sample_id = "sample_01"
read_count = 15000000
gc_content = 0.512
print(f"Sample: {sample_id}, Reads: {read_count}, GC: {gc_content:.2%}")
# Sample: sample_01, Reads: 15000000, GC: 51.20%
print(f"GC content: {gc_content:.4f}") # 소수점 4자리
print(f"Read count: {read_count:,}") # 천 단위 구분 기호
format 메서드
print("Sample: {}, Reads: {}".format(sample_id, read_count))
print("GC: {gc:.2%}".format(gc=gc_content))
f-string이 가독성이 높고 간결해서 현재는 f-string을 사용하는 것이 일반적입니다.
이스케이프 문자
| 이스케이프 | 의미 |
| \n | 줄바꿈 |
| \t | 탭 |
| \\ | 백슬래시 |
| \" | 큰따옴표 |
| \' | 작은따옴표 |
파일 경로를 다룰 때 백슬래시 문제를 피하기 위해 raw string(r"")을 사용하기도 합니다.
path = r"C:\Users\user\data" # 백슬래시를 이스케이프 없이 사용
문자열과 숫자 타입 변환
# 문자열 -> 숫자
count = int("150")
ratio = float("0.512")
# 숫자 -> 문자열
s = str(150)
# FASTQ 파일 파싱 예시: 문자열로 읽은 값을 숫자로 변환
line = "15000000"
read_count = int(line.strip())
존재하지 않는 변환을 시도하면 ValueError가 발생합니다.
int("ATCG") # ValueError
float("abc") # ValueError
'BI&Programming-Tools > Python' 카테고리의 다른 글
| [파이썬 기초] 딕셔너리, 셋, 불리언 (0) | 2026.06.15 |
|---|---|
| [파이썬 기초] 리스트와 튜플 (0) | 2026.06.15 |
| [파이썬 기초] 변수, 동적 타이핑, 자료형 개요 (0) | 2026.06.15 |
| [파이썬 기초] 가상환경과 pip 패키지 관리 (0) | 2026.06.15 |
| [파이썬 기초] 파이썬을 쓰는 이유와 환경 세팅 (0) | 2026.06.15 |
