[파이썬 기초] 숫자와 문자열 다루기

2026. 6. 15. 08:00·BI&Programming-Tools/Python

숫자 다루기

기본 연산자

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
'BI&Programming-Tools/Python' 카테고리의 다른 글
  • [파이썬 기초] 딕셔너리, 셋, 불리언
  • [파이썬 기초] 리스트와 튜플
  • [파이썬 기초] 변수, 동적 타이핑, 자료형 개요
  • [파이썬 기초] 가상환경과 pip 패키지 관리
데이터로 읽는 생명
데이터로 읽는 생명
is-note 님의 블로그 입니다.
  • 데이터로 읽는 생명
    In Silico Note
    데이터로 읽는 생명
  • 전체
    오늘
    어제
    • 분류 전체보기 (190)
      • Bio-Knowledge (16)
        • 분자생물학 & 유전학 기초 (0)
        • 전사체학 & 유전자 발현 (0)
        • 구조생물학 & 단백질 (0)
        • 싱글셀 & 다중오믹스 (0)
        • 임상유전학 & 질환 데이터 (0)
      • Programming (4)
        • API (4)
      • BI&Programming-Tools (111)
        • File Formats (14)
        • Linux & Bash Script (38)
        • Python (35)
        • R (11)
        • 통계 (8)
        • Pipeline Manager (0)
        • Etc (5)
      • Bio Data Analysis (28)
        • 서열분석개론 (6)
        • WGS(Whole Genome Seq) (11)
        • WES(Whole Exome Seq) (2)
        • RNA-Seq (4)
        • Metagenome (2)
        • Non-human Resequencing (1)
        • 임상유전체 분석 (1)
        • Multi-Omics (1)
      • Bio-Trends & Tech (1)
      • 코딩테스트 연습 (30)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파일포맷
    유전체분석
    파이썬연습
    리눅스기초
    파이썬기초
    wgs
    코딩테스트
    ngs
    분자생물학
    GATK
    fasta
    FASTQ
    R
    R기초
    데이터분석
    리눅스
    파이썬
    bioinformatics
    통계
    생물정보학
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
데이터로 읽는 생명
[파이썬 기초] 숫자와 문자열 다루기
상단으로

티스토리툴바