[파이썬 기초] 리스트와 튜플

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

리스트와 튜플은 모두 순서가 있는 데이터 컬렉션입니다.

앞선 자료형 개요 글에서 개념을 간략히 다뤘으며, 이번 글에서는 실제 사용 방법을 더 구체적으로 정리합니다.


리스트 (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
'BI&Programming-Tools/Python' 카테고리의 다른 글
  • [파이썬 기초] print / input / 주석
  • [파이썬 기초] 딕셔너리, 셋, 불리언
  • [파이썬 기초] 숫자와 문자열 다루기
  • [파이썬 기초] 변수, 동적 타이핑, 자료형 개요
데이터로 읽는 생명
데이터로 읽는 생명
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
데이터로 읽는 생명
[파이썬 기초] 리스트와 튜플
상단으로

티스토리툴바