본문 바로가기
Python

Python | 파이썬 리스트란 ? in 연산자부터 중첩 리스트까지

by sseul-log 2025. 10. 2.

파이썬 리스트를 더 효율적으로 다루는 방법들을 알아보겠습니다.

특히 실무에서 자주 사용되는 in 연산자와 다양한 리스트 메소드들을 예제와 함께 살펴보겠습니다.


1. 리스트에서 값의 존재 확인하기

프로그래밍을 하다 보면 특정 값이 리스트에 포함되어 있는지 확인해야 할 때가 많습니다.

먼저 직접 함수를 만들어 보고, 파이썬의 내장 기능을 활용하는 방법을 알아보겠습니다.


 

[방법 1] 함수를 직접 구현하기

python
# 특정 값이 리스트에 있는지 확인하는 함수
def check_item(my_list, target):
    i = 0
    while i < len(my_list):
        # 리스트에서 target을 찾으면 True 반환
        if my_list[i] == target:
            return True
        i = i + 1
    
    # 리스트 전체를 확인했는데 못 찾으면 False 반환
    return False

# 테스트
fruits = ["사과", "바나나", "오렌지", "포도", "딸기"]
print(check_item(fruits, "오렌지"))  # True
print(check_item(fruits, "수박"))    # False

이 함수는 리스트를 처음부터 끝까지 순회하면서 찾고자 하는 값이 있는지 확인합니다.

값을 찾으면 즉시 True를 반환하고, 끝까지 못 찾으면 False를 반환하는 구조입니다.


 

[방법 2] in 연산자 사용하기 (추천!)

파이썬에서는 이런 기능을 간단하게 구현할 수 있도록 in 연산자를 제공합니다:

python
fruits = ["사과", "바나나", "오렌지", "포도", "딸기"]
print("오렌지" in fruits)  # True
print("수박" in fruits)    # False

 


 

 

💡 Tip: not in 연산자로 없는지 확인하기

반대로 값이 리스트에 없는지 확인하고 싶다면 not in을 사용하세요:

python
fruits = ["사과", "바나나", "오렌지", "포도", "딸기"]
print("오렌지" not in fruits)  # False (오렌지가 있으므로)
print("수박" not in fruits)    # True (수박이 없으므로)

in 연산자는 코드를 더 읽기 쉽게 만들어주고, 파이썬 내부적으로 최적화되어 있어 성능도 우수합니다.

 


2. 리스트 안의 리스트 (중첩 리스트)

리스트는 다양한 타입의 데이터를 담을 수 있는데, 심지어 다른 리스트도 담을 수 있습니다. 이를 중첩 리스트(Nested List) 라고 부릅니다.

 


 

실전 예제: 학생별 과목 점수 관리

python
# 3명의 학생이 각각 국어, 영어, 수학 점수를 가지고 있음
student_scores = [
    [85, 90, 88],  # 학생1: 국어, 영어, 수학
    [92, 88, 95],  # 학생2: 국어, 영어, 수학
    [78, 85, 82]   # 학생3: 국어, 영어, 수학
]

# 두 번째 학생의 전체 성적
print(student_scores[1])  # [92, 88, 95]

# 첫 번째 학생의 성적
print(student_scores[0])  # [85, 90, 88]

# 두 번째 학생의 영어 점수 (인덱스: [1][1])
print(student_scores[1][1])  # 88

# 세 번째 학생의 수학 점수 (인덱스: [2][2])
print(student_scores[2][2])  # 82

# 국어 과목의 평균 점수 계산
korean_avg = (student_scores[0][0] + student_scores[1][0] + student_scores[2][0]) / 3
print(f"국어 평균: {korean_avg:.1f}점")  # 85.0점

중첩 리스트에 접근할 때는 대괄호를 연속으로 사용합니다. 첫 번째 대괄호는 외부 리스트의 인덱스, 두 번째 대괄호는 내부 리스트의 인덱스를 나타냅니다.


3. 리스트를 더 강력하게: 필수 메소드들

1️⃣ sort() 메소드 - 리스트 정렬하기

sort() 메소드는 리스트를 직접 정렬합니다. 새로운 리스트를 만들지 않고 원본을 변경한다는 점이 중요합니다:

python
scores = [88, 92, 75, 90, 83]
scores.sort()
print(scores)  # [75, 83, 88, 90, 92]

# 내림차순 정렬
scores.sort(reverse=True)
print(scores)  # [92, 90, 88, 83, 75]

2️⃣ reverse() 메소드 - 리스트 뒤집기

reverse() 메소드는 리스트의 순서를 완전히 뒤집습니다:

python
weekdays = ["월", "화", "수", "목", "금"]
weekdays.reverse()
print(weekdays)  # ['금', '목', '수', '화', '월']

 


3️⃣ index() 메소드 - 값의 위치 찾기

특정 값이 리스트의 몇 번째 위치에 있는지 찾을 때 사용합니다:

python
colors = ["빨강", "파랑", "노랑", "초록", "보라"]
print(colors.index("노랑"))  # 2
print(colors.index("초록"))  # 3

# 만약 없는 값을 찾으면 에러가 발생합니다
# print(colors.index("검정"))  # ValueError 발생!

💡 Tip: index() 사용 전에 in 연산자로 먼저 확인하면 안전합니다:

python
if "검정" in colors:
    print(colors.index("검정"))
else:
    print("검정색은 리스트에 없습니다")

 


4️⃣ remove() 메소드 - 값으로 삭제하기

remove() 메소드는 특정 값을 가진 첫 번째 요소를 삭제합니다:

python
shopping_list = ["우유", "계란", "빵", "과자", "빵", "음료수"]
shopping_list.remove("빵")  # 첫 번째 "빵"만 삭제
print(shopping_list)  # ['우유', '계란', '과자', '빵', '음료수']

# 모든 "빵"을 삭제하려면 반복문 사용
while "빵" in shopping_list:
    shopping_list.remove("빵")
print(shopping_list)  # ['우유', '계란', '과자', '음료수']

 


4. 정리 & 실전 팁

  1. in 연산자: 리스트에 특정 값이 있는지 확인할 때 가장 파이썬스러운 방법
  2. 중첩 리스트: 2차원 데이터를 다룰 때 유용 (표, 행렬 등)
  3. 리스트 메소드들: 원본을 변경하는 메소드(sort, reverse, remove)와 정보를 반환하는 메소드(index)의 차이를 이해하기

 

실전에서 자주 하는 실수들

1. sort()와 sorted()를 혼동하기 (sort는 원본 변경, sorted는 새 리스트 반환)

2. 없는 값에 index()를 사용해서 에러 발생
3. remove()가 모든 값을 삭제한다고 착각하기 (첫 번째 값만 삭제)