연산자
비교 연산자
두 값을 비교해서 True 또는 False를 반환합니다.
| 연산자 | 의미 | 예시 |
| == | 같다 | 3 == 3 → True |
| != | 같지 않다 | 3 != 5 → True |
| > | 크다 | 5 > 3 → True |
| < | 작다 | 3 < 5 → True |
| >= | 크거나 같다 | 5 >= 5 → True |
| <= | 작거나 같다 | 3 <= 5 → True |
coverage = 30.5
print(coverage >= 20) # True
print(coverage == 30) # False
print(coverage != 30) # True
파이썬에서는 비교 연산자를 연속으로 연결할 수 있습니다.
q_score = 25
print(20 <= q_score <= 40) # True (20 이상 40 이하)
논리 연산자
| 연산자 | 의미 |
| and | 두 조건 모두 참일 때 True |
| or | 하나라도 참이면 True |
| not | 참/거짓 반전 |
coverage = 30.5
q_score = 25
print(coverage >= 20 and q_score >= 20) # True
print(coverage < 10 or q_score >= 20) # True
print(not coverage >= 20) # False
단락 평가 (short-circuit evaluation)
and는 앞 조건이 False이면 뒤를 평가하지 않고, or는 앞 조건이 True이면 뒤를 평가하지 않습니다.
# 리스트가 비어있을 때 인덱스 접근을 방지하는 패턴
genes = []
if genes and genes[0] == "BRCA1": # genes가 비어있으면 뒤를 평가하지 않음
print("BRCA1 존재")
멤버십 연산자
값이 컬렉션 안에 있는지 확인합니다.
genes = ["BRCA1", "TP53", "EGFR"]
print("BRCA1" in genes) # True
print("KRAS" not in genes) # True
print("TP53" in genes) # True
# 딕셔너리에서는 키 기준으로 확인
sample_info = {"id": "sample_01", "coverage": 30.5}
print("id" in sample_info) # True
print("coverage" in sample_info) # True
동일성 연산자
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b) # True (값이 같음)
print(a is b) # False (다른 객체)
print(a is c) # True (같은 객체)
==는 값이 같은지, is는 같은 객체인지를 비교합니다. None 비교에는 == 대신 is를 사용하는 것이 권장됩니다.
result = None
print(result is None) # True (권장)
print(result == None) # True (비권장)
조건문
if / elif / else
if 조건:
# 조건이 True일 때 실행
elif 다른조건:
# 앞 조건이 False이고 이 조건이 True일 때 실행
else:
# 모든 조건이 False일 때 실행
파이썬은 중괄호 대신 들여쓰기로 블록을 구분합니다. 들여쓰기는 스페이스 4칸을 표준으로 사용합니다.
coverage = 25.0
if coverage >= 30:
print("충분한 커버리지")
elif coverage >= 20:
print("적정 커버리지")
else:
print("낮은 커버리지")
# 적정 커버리지
# 생물정보학 예시: 품질 필터링
q_score = 28
read_length = 150
if q_score >= 30 and read_length >= 100:
print("고품질 리드")
elif q_score >= 20:
print("사용 가능한 리드")
else:
print("필터링 대상")
중첩 조건문
gc_content = 0.48
coverage = 35.0
if coverage >= 20:
if gc_content >= 0.4 and gc_content <= 0.6:
print("정상 범위")
else:
print("GC 함량 이상")
else:
print("커버리지 부족")
중첩이 깊어지면 가독성이 떨어집니다.
논리 연산자로 조건을 합치거나, 조건이 충족되지 않으면 일찍 반환(early return)하는 방식으로 단순화하는 것이 좋습니다.
def check_quality(gc, cov):
if cov < 20:
return "커버리지 부족"
if not (0.4 <= gc <= 0.6):
return "GC 함량 이상"
return "정상 범위"
조건부 표현식 (삼항 연산자)
간단한 조건 분기를 한 줄로 표현합니다.
# 기본 형태
값 = 참일때값 if 조건 else 거짓일때값
coverage = 25.0
status = "충분" if coverage >= 30 else "부족"
print(status) # 부족
# 리스트 컴프리헨션과 함께 사용
scores = [25, 35, 18, 30, 22]
labels = ["pass" if s >= 30 else "fail" for s in scores]
# ['fail', 'pass', 'fail', 'pass', 'fail']
조건이 복잡하거나 중첩될 경우 가독성이 떨어지므로, 단순한 경우에만 사용하는 것이 좋습니다.
match 문 (파이썬 3.10 이상)
여러 값과 매칭하는 경우 match 문을 사용할 수 있습니다.
다른 언어의 switch 문과 비슷합니다.
file_type = "fastq"
match file_type:
case "fastq":
print("FASTQ 파일 처리")
case "fasta":
print("FASTA 파일 처리")
case "bam" | "sam":
print("BAM/SAM 파일 처리")
case _:
print("지원하지 않는 형식")
case _는 어떤 값과도 일치하는 기본 케이스입니다. 여러 값을 동시에 매칭할 때는 |로 구분합니다.
연산자 우선순위
여러 연산자가 함께 사용될 때 우선순위에 따라 평가됩니다. 아래로 내려갈수록 우선순위가 낮습니다.
| 우선순위 | 연산자 |
| 높음 | ** (거듭제곱) |
| *, /, //, % | |
| +, - | |
| <, >, <=, >=, ==, != | |
| in, not in, is, is not | |
| not | |
| and | |
| 낮음 | or |
우선순위가 불명확할 때는 괄호로 명시적으로 묶어서 의도를 분명히 하는 것이 좋습니다.
# 의도가 불명확한 경우
result = a > b and c < d or e == f
# 괄호로 명확하게
result = (a > b and c < d) or (e == f)
'BI&Programming-Tools > Python' 카테고리의 다른 글
| [파이썬 기초] 람다 함수와 내장 함수, collections 모듈 (0) | 2026.06.16 |
|---|---|
| [파이썬 기초] 반복문 (while, for, comprehension) (0) | 2026.06.16 |
| [파이썬 기초] print / input / 주석 (0) | 2026.06.15 |
| [파이썬 기초] 딕셔너리, 셋, 불리언 (0) | 2026.06.15 |
| [파이썬 기초] 리스트와 튜플 (0) | 2026.06.15 |
