툴곰코드 노트파이썬 › 파이썬 리스트

파이썬 리스트

변수 하나에 값 하나씩 담다 보면 금세 한계가 옵니다. 리스트는 값 여러 개를 순서대로 담고, 번호로 꺼내 씁니다.

⬇ 예제 파일 받기 (.py)
파이썬 · 회원가입 없음
내려받아 python 파일이름.py 로 실행합니다.
광고 영역

무엇을 하는 것인가

학생 서른 명의 점수를 변수 서른 개에 담을 수는 없습니다. 리스트는 값 여러 개를 한 이름에 순서대로 담아 두는 그릇입니다.

대괄호로 만듭니다. 점수 = [90, 85, 77]. 꺼낼 때는 0부터 세는 번호를 대괄호에 넣습니다. 점수[0]이 첫 번째입니다. 1이 아니라 0부터라는 점이 처음엔 어색하지만 곧 익숙해집니다.

뒤에서부터 셀 때는 음수를 씁니다. 점수[-1]이 마지막, 점수[-2]가 뒤에서 둘째입니다. 길이를 몰라도 마지막을 집을 수 있어 자주 씁니다.

슬라이싱으로 여러 개를 한 번에 잘라냅니다. 점수[1:3]은 1번부터 3번 앞까지, 즉 1번과 2번입니다. range와 마찬가지로 끝은 포함되지 않습니다. 파이썬은 이 규칙이 일관됩니다.

리스트는 만든 뒤에 바꿀 수 있습니다. append()로 뒤에 붙이고, remove()로 지우고, 번호로 직접 갈아끼울 수도 있습니다.

예제 코드

아래 코드가 위 버튼으로 받는 파일과 같은 내용입니다. 통째로 복사해 실행해 보고, 값을 바꿔 가며 결과가 어떻게 달라지는지 보는 편이 읽기만 하는 것보다 훨씬 빨리 익습니다.

# 리스트 — 값 여러 개를 한 이름에 순서대로 담기

점수 = [90, 85, 77, 68, 94]

print("첫 번째:", 점수[0])     # 0 부터 셉니다
print("마지막:", 점수[-1])     # 음수는 뒤에서부터
print("개수:", len(점수))

# 슬라이싱 — 끝 번호는 빠집니다 (range 와 같은 규칙)
print(점수[1:3])               # [85, 77]  1번, 2번
print(점수[:2])                # [90, 85]  처음부터 2번 앞까지
print(점수[2:])                # [77, 68, 94]  2번부터 끝까지

# 만든 뒤에 바꿀 수 있습니다
점수.append(100)               # 뒤에 붙이기
점수[0] = 95                   # 갈아끼우기
점수.remove(68)                # 값으로 지우기
print(점수)

# 합계 · 평균 · 최대 · 최소는 만들어 놓은 걸 씁니다
print("합계:", sum(점수))
print("평균:", sum(점수) / len(점수))
print("최고:", max(점수), "최저:", min(점수))

# 정렬 — sort() 는 원본을 바꾸고, sorted() 는 새 리스트를 돌려줍니다
print("정렬본:", sorted(점수, reverse=True))
print("원본 그대로:", 점수)

# 여기서 많이 당합니다. = 는 복사가 아니라 이름 하나를 더 붙이는 것입니다.
사본 = 점수
사본.append(0)
print("원본까지 바뀜:", 점수)

진짜사본 = 점수.copy()         # 또는 점수[:]
진짜사본.append(999)
print("원본은 그대로:", 점수)

# for 와 같이 쓰면 제 몫을 합니다
for i, 값 in enumerate(점수, 1):
    print(i, "번째 학생:", 값, "점")

기억할 것

광고 영역

자주 묻는 것

IndexError: list index out of range 가 납니다

없는 번호를 집었다는 뜻입니다. 원소가 3개면 번호는 0,1,2 뿐이라 [3]은 오류입니다. len(목록)으로 개수를 확인하고, 마지막은 [-1]로 집으세요.

리스트를 복사했는데 원본까지 바뀝니다

b = a는 값을 복사하는 게 아니라 같은 리스트에 이름을 하나 더 붙이는 것입니다. 그래서 b를 고치면 a도 바뀝니다. 진짜 복사는 b = a.copy() 또는 b = a[:]입니다.

리스트와 튜플은 뭐가 다른가요

튜플은 소괄호로 만들고 만든 뒤 못 바꿉니다. 바뀌면 안 되는 값(좌표, 설정값)에 씁니다. 바꿔 가며 쓸 거면 리스트입니다.

정렬은 어떻게 하나요

목록.sort()는 원본을 정렬해 버리고, sorted(목록)은 원본을 두고 정렬된 새 리스트를 돌려줍니다. 원본을 지켜야 하면 sorted()를 쓰세요.

이어서 볼 글