리스트와 튜플은 모두 순서가 있는 데이터 컬렉션입니다.
앞선 자료형 개요 글에서 개념을 간략히 다뤘으며, 이번 글에서는 실제 사용 방법을 더 구체적으로 정리합니다.
리스트 (list)
리스트는 가변(mutable) 자료형으로, 생성 후에도 요소를 추가, 수정, 삭제할 수 있습니다.
대괄호([])로 생성합니다.
samples = ["sample_01", "sample_02", "sample_03"]
counts = [150, 230, 95, 410]
mixed = [1, "ATCG", True, 3.14] # 여러 타입 혼합 가능
empty = [] # 빈 리스트
인덱싱과 슬라이싱
seq_list = ["A", "T", "C", "G", "A", "T"]
# 인덱싱
print(seq_list[0]) # A (첫 번째)
print(seq_list[-1]) # T (마지막)
print(seq_list[-2]) # A (뒤에서 두 번째)
# 슬라이싱 [start:stop:step]
print(seq_list[1:4]) # ['T', 'C', 'G'] (인덱스 1~3)
print(seq_list[:3]) # ['A', 'T', 'C'] (처음부터 인덱스 2까지)
print(seq_list[3:]) # ['G', 'A', 'T'] (인덱스 3부터 끝까지)
print(seq_list[::2]) # ['A', 'C', 'A'] (두 칸씩 건너뜀)
print(seq_list[::-1]) # ['T', 'A', 'G', 'C', 'T', 'A'] (역순)
슬라이싱의 stop 인덱스는 포함되지 않습니다. seq_list[1:4]는 인덱스 1, 2, 3의 요소를 가져옵니다.
요소 추가 및 삭제
samples = ["sample_01", "sample_02"]
# 추가
samples.append("sample_03") # 맨 끝에 요소 추가
samples.insert(1, "sample_00") # 특정 위치에 삽입
samples.extend(["sample_04", "sample_05"]) # 여러 요소 한꺼번에 추가
# 삭제
samples.remove("sample_00") # 값으로 삭제 (처음 나오는 것 삭제)
popped = samples.pop() # 마지막 요소 꺼내기
popped = samples.pop(0) # 특정 인덱스 요소 꺼내기
del samples[0] # 특정 인덱스 요소 삭제
samples.clear() # 전체 비우기
수정
counts = [150, 230, 95, 410]
counts[2] = 100 # 특정 인덱스 값 수정
counts[1:3] = [200, 110] # 슬라이싱으로 범위 수정
자주 쓰이는 메서드
counts = [410, 150, 95, 230, 150]
counts.sort() # 오름차순 정렬 (원본 변경)
counts.sort(reverse=True) # 내림차순 정렬
sorted_counts = sorted(counts) # 원본 유지, 정렬된 새 리스트 반환
counts.reverse() # 역순으로 뒤집기 (원본 변경)
print(counts.index(230)) # 값의 인덱스 반환
print(counts.count(150)) # 값의 등장 횟수
print(len(counts)) # 리스트 길이
print(sum(counts)) # 합계
print(min(counts), max(counts)) # 최솟값, 최댓값
.sort()는 원본 리스트를 직접 변경하고 None을 반환합니다. sorted()는 원본을 유지하고 정렬된 새 리스트를 반환합니다. 원본을 보존해야 할 때는 sorted()를 사용합니다.
리스트 컴프리헨션
리스트를 간결하게 생성하는 파이썬 특유의 문법입니다. for 루프를 한 줄로 표현합니다.
# 기본 형태
squares = [x**2 for x in range(1, 6)]
# [1, 4, 9, 16, 25]
# 조건 추가
even = [x for x in range(10) if x % 2 == 0]
# [0, 2, 4, 6, 8]
# 생물정보학 예시: 길이가 10 이상인 시퀀스만 필터링
sequences = ["ATCG", "ATCGATCGATCG", "GGCC", "TTTTTTTTTTTT"]
long_seqs = [seq for seq in sequences if len(seq) >= 10]
# ['ATCGATCGATCG', 'TTTTTTTTTTTT']
# 문자열 변환
gene_list = ["brca1", "tp53", "egfr"]
upper_genes = [gene.upper() for gene in gene_list]
# ['BRCA1', 'TP53', 'EGFR']
리스트 복사
리스트를 복사할 때는 주의가 필요합니다. 단순 대입은 복사가 아니라 같은 객체를 참조합니다.
a = [1, 2, 3]
b = a # 같은 객체를 참조 (복사 아님)
b.append(4)
print(a) # [1, 2, 3, 4] → a도 변경됨
# 얕은 복사
c = a.copy()
d = a[:]
e = list(a)
c.append(5)
print(a) # [1, 2, 3, 4] → a는 변경되지 않음
리스트 안에 리스트가 중첩된 경우 얕은 복사로는 내부 리스트까지 독립적으로 복사되지 않습니다. 완전히 독립된 복사가 필요하면 copy 모듈의 deepcopy를 사용합니다.
import copy
nested = [[1, 2], [3, 4]]
deep = copy.deepcopy(nested)
튜플 (tuple)
튜플은 불변(immutable) 자료형으로, 생성 후 요소를 변경할 수 없습니다.
소괄호(())로 생성하며, 소괄호 없이 쉼표만으로도 튜플이 됩니다.
coordinate = (37.5, 127.0)
rgb = (255, 128, 0)
single = (1,) # 요소가 하나인 튜플은 반드시 쉼표 필요
also_tuple = 1, 2, 3 # 소괄호 없이도 튜플 생성 가능
인덱싱과 슬라이싱
리스트와 동일하게 사용할 수 있습니다.
coord = (10.5, 20.3, 5.0)
print(coord[0]) # 10.5
print(coord[1:]) # (20.3, 5.0)
불변성
튜플은 요소를 변경하거나 추가, 삭제할 수 없습니다.
coord = (10.5, 20.3)
coord[0] = 99.0 # TypeError 발생
튜플 언패킹
튜플의 값을 여러 변수에 한꺼번에 할당할 수 있습니다.
파이썬에서 자주 사용하는 패턴입니다.
coord = (37.5, 127.0)
lat, lon = coord
print(lat) # 37.5
print(lon) # 127.0
# 함수가 여러 값을 반환할 때
def get_gc_content(seq):
g = seq.count("G")
c = seq.count("C")
return g, c # 튜플로 반환
g_count, c_count = get_gc_content("ATCGATCGGGCC")
*를 사용하면 나머지 값을 리스트로 받을 수 있습니다.
first, *rest = (1, 2, 3, 4, 5)
print(first) # 1
print(rest) # [2, 3, 4, 5]
튜플을 사용하는 경우
- 변경하면 안 되는 데이터를 다룰 때 (좌표, RGB 값, 설정값 등)
- 함수에서 여러 값을 반환할 때
- 딕셔너리의 키로 사용할 때 (리스트는 불변이 아니므로 키로 사용 불가)
# 튜플은 딕셔너리 키로 사용 가능
location_data = {
(37.5, 127.0): "Seoul",
(35.6, 139.7): "Tokyo"
}
리스트 vs 튜플 정리
| 항목 | 리스트 | 튜플 |
| 생성 | [] | () |
| 가변성 | 가변 (수정 가능) | 불변 (수정 불가) |
| 메서드 | append, remove, sort 등 다양 | count, index만 제공 |
| 딕셔너리 키 사용 | 불가 | 가능 |
| 주요 용도 | 동적으로 변하는 데이터 | 변경되지 않아야 하는 데이터, 다중 반환값 |
'BI&Programming-Tools > Python' 카테고리의 다른 글
| [파이썬 기초] print / input / 주석 (0) | 2026.06.15 |
|---|---|
| [파이썬 기초] 딕셔너리, 셋, 불리언 (0) | 2026.06.15 |
| [파이썬 기초] 숫자와 문자열 다루기 (0) | 2026.06.15 |
| [파이썬 기초] 변수, 동적 타이핑, 자료형 개요 (0) | 2026.06.15 |
| [파이썬 기초] 가상환경과 pip 패키지 관리 (0) | 2026.06.15 |
