리스트(List)

리스트(List)

todos = ["숙제하기", "책읽기"]
menus = ["김밥", "라면", "돈가스", "떡볶이"]

리스트의 특징

  • 여러 종류의 데이터를 자유롭게 담을 수 있음
  • 리스트 안에 리스트를 담을 수 있음
  • 순서가 있음
  • 데이터의 추가, 삭제가 용이함

리스트 다루기

인덱스를 통한 접근 방법

  • 0부터 시작
  • 대괄호[] 사용
my_fruits = ["사과", "바나나", "딸기", "수박", "망고"]
print("첫 번째 과일:", my_fruits[0])
print("세 번째 과일:", my_fruits[2])
print("다섯 번째 과일:", my_fruits[4])

# 뒤에서부터 찾기
print("마지막 과일:", my_fruits[-1])
print("마지막에서 두 번째 과일:", my_fruits[-2])
print("마지막에서 세 번째 과일:", my_fruits[-3])

리스트 슬라이싱 기초

  • 문자열 슬라이싱과 동일
  • [시작:끝:스텝] 형태 사용
students = ["민수", "영희", "철수", "영수", "지민"]
print("처음부터 3번까지:", students[0:3])
print("2번부터 4번까지:", students[2:4])

print("처음부터 3번까지:", students[:3])    # 0은 생략 가능
print("2번부터 끝까지:", students[2:])      # 끝 번호 생략

# 스텝(step) 사용하기
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print("2칸씩 건너뛰기:", numbers[::2])      # 짝수 번호만 가져오기
print("3칸씩 건너뛰기:", numbers[::3])      # 3개씩 건너뛰며 가져오기
print("거꾸로 가져오기:", numbers[::-1])    # 역순으로 가져오기

리스트 요소 관리하기

  • 새로운 값 추가
    • append() : 항상 리스트의 마지막에 값을 추가
    • insert() : 원하는 위치에 값을 추가. 중간에 값을 끼워넣는 경우 append() 보다 실행 속도가 더 느리다.
  • 기존의 값 삭제
    • remove() : 리스트 내의 특정 값을 찾아서 삭제
    • del : 위치를 기준으로 삭제
  • 값 수정하기
    • 수정하고 싶은 위치의 인덱스를 사용
# 장보기 목록에 새로운 항목 추가하기
shopping_list = ["사과", "바나나"]
print("처음 장보기 목록:", shopping_list)

# append 사용하기: 맨 뒤에 추가
shopping_list.append("우유")    # 맨 뒤에 우유 추가
print("우유 추가 후:", shopping_list)

# insert 사용하기: 원하는 위치에 추가
shopping_list.insert(1, "계란")    # 1번 위치(두 번째)에 계란 추가
print("계란을 중간에 추가:", shopping_list)
  • 결과

    처음 장보기 목록: [‘사과’, ‘바나나’]
    우유 추가 후: [‘사과’, ‘바나나’, ‘우유’]
    계란을 중간에 추가: [‘사과’, ‘계란’, ‘바나나’, ‘우유’]

print("현재 장보기 목록:", shopping_list)

# remove로 삭제하기: 값으로 지우기
shopping_list.remove("바나나")    # "바나나" 삭제
print("바나나 삭제 후:", shopping_list)

# del로 삭제하기: 위치로 지우기
del shopping_list[1]    # 두 번째 항목 삭제
print("두 번째 항목 삭제 후:", shopping_list)
  • 결과

    현재 장보기 목록: [‘사과’, ‘계란’, ‘바나나’, ‘우유’]
    바나나 삭제 후: [‘사과’, ‘계란’, ‘우유’]
    두 번째 항목 삭제 후: [‘사과’, ‘우유’]

subjects = ["국어", "수학", "영어", "과학"]
print("현재 과목:", subjects)

# 하나의 과목 수정하기
subjects[1] = "음악"    # 두 번째 과목을 "음악"으로 변경
print("수학을 음악으로 변경:", subjects)

# 여러 과목 한번에 수정하기
subjects[2:] = ["미술", "체육"]    # 뒤의 두 과목을 한번에 변경
print("뒤의 두 과목 변경:", subjects)
  • 결과

    현재 과목: [‘국어’, ‘수학’, ‘영어’, ‘과학’]
    수학을 음악으로 변경: [‘국어’, ‘음악’, ‘영어’, ‘과학’]
    뒤의 두 과목 변경: [‘국어’, ‘음악’, ‘미술’, ‘체육’]

리스트 메소드 활용하기

리스트 정렬하기

  • sort()
    • 오름차순 정렬
    • sort(reverse=True)를 사용하면 내림차순 정렬
  • reverse()
    • 리스트의 현재 순서를 반대로 뒤집음
# 🔄 오름차순 정렬하기

numbers = [5, 2, 8, 1, 9, 3, 7]
print("숫자 정렬 전:", numbers)

numbers.sort()
print("숫자 정렬 후:", numbers)

fruits = ["바나나", "사과", "오렌지", "포도", "키위"]
print("과일 정렬 전:", fruits)

fruits.sort()
print("과일 정렬 후:", fruits)

# 📊 내림차순 정렬하기
scores = [85, 92, 78, 90, 87]
print("정렬 전 점수:", scores)

scores.sort(reverse=True)
print("내림차순 정렬 후:", scores)

# 🔁 리스트 뒤집기
animals = ["강아지", "고양이", "토끼", "햄스터"]
print("원래 순서:", animals)

animals.reverse()
print("뒤집은 후:", animals)
  • 결과

    숫자 정렬 전: [5, 2, 8, 1, 9, 3, 7]
    숫자 정렬 후: [1, 2, 3, 5, 7, 8, 9]
    과일 정렬 전: [‘바나나’, ‘사과’, ‘오렌지’, ‘포도’, ‘키위’]
    과일 정렬 후: [‘바나나’, ‘사과’, ‘오렌지’, ‘키위’, ‘포도’]

    정렬 전 점수: [85, 92, 78, 90, 87]
    내림차순 정렬 후: [92, 90, 87, 85, 78]

    원래 순서: [‘강아지’, ‘고양이’, ‘토끼’, ‘햄스터’]
    뒤집은 후: [‘햄스터’, ‘토끼’, ‘고양이’, ‘강아지’]

리스트 요소 세기와 계산하기

  • count()
    • 리스트에서 특정 값이 몇 개 있는지 카운트
  • len()
    • 리스트의 길이. 전체 값의 개수
  • sum()
    • 숫자 리스트의 총합 계산
# A형인 학생 몇 명인지 알아보기
blood_types = ['A', 'B', 'O', 'A', 'AB', 'O', 'A', 'B']
count_a = blood_types.count('A')
print("A형인 학생 수:", count_a)

students = ["민수", "영희", "철수", "영수", "지민"]
total_students = len(students)
print("전체 학생 수:", total_students, "명")

# 시험 점수의 총점과 평균 계산하기
scores = [92, 85, 78, 90, 87]
total_score = sum(scores)              # 총점 계산
average_score = total_score / len(scores)  # 평균 계산
print("시험 점수:", scores)
print("총점:", total_score, "점")
print("평균:", average_score, "점")
  • 결과

    A형인 학생 수 : 3

    전체 학생 수 : 5명

    시험 점수: [92, 85, 78, 90, 87]
    총점: 432 점
    평균: 86.4 점

리스트 요소 찾기

  • index()
    • 찾고자 하는 요소의 인덱스를 반환
    • 조건에 맞는 요소가 여러개일 경우 처음 나오는 위치만 반환
    • 모든 위치에 접근하고 싶으면 for문 등을 이용
# 학급 명단에서 학생 찾기
students = ["민수", "영희", "철수", "영수", "지민"]
position = students.index("철수")
print("철수는 명단의 ", position + 1, "번째에 있습니다.")

# 같은 이름이 여러 개 있는 경우
names = ["민수", "영희", "민수", "철수", "민수"]
first_minsu = names.index("민수")
print("민수가 처음 등장하는 위치:", first_minsu + 1, "번째")

# 같은 이름이 여러 개 있는 경우 모든 위치 찾아보기
names = ["민수", "영희", "민수", "철수", "민수"]
print("전체 명단:", names)

# 모든 '민수' 찾기
all_positions = []
for i in range(len(names)):
    if names[i] == "민수":
        all_positions.append(i + 1)

print("민수가 있는 모든 위치:", all_positions, "번째")
  • 결과

    철수는 명단의 3번째에 있습니다.

    민수가 처음 등장하는 위치: 1번째

    전체 명단: [‘민수’, ‘영희’, ‘민수’, ‘철수’, ‘민수’]
    민수가 있는 모든 위치: [1, 3, 5] 번째

리스트에서 값 꺼내기

  • pop()
    • 리스트에서 값을 꺼내면서 동시에 그 값을 삭제
    • 기본적으로 마지막 값을 꺼내지만, 위치를 지정하면 원하는 위치의 값도 꺼낼 수 있음
# 카드 게임처럼 값 뽑기
cards = ["A", "2", "3", "4", "5"]
print("현재 카드덱:", cards)

last_card = cards.pop()    # 마지막 카드 뽑기
print("뽑은 카드:", last_card)
print("남은 카드덱:", cards)

first_card = cards.pop(0)  # 첫 번째 카드 뽑기
print("다음 뽑은 카드:", first_card)
print("최종 남은 카드덱:", cards)
  • 결과

    현재 카드덱: [‘A’, ‘2’, ‘3’, ‘4’, ‘5’]
    뽑은 카드: 5
    남은 카드덱: [‘A’, ‘2’, ‘3’, ‘4’]
    다음 뽑은 카드: A
    최종 남은 카드덱: [‘2’, ‘3’, ‘4’]

출처 데이스쿨 - 나도 할 수 있다! 파이썬: 상

Leave a comment