본문 바로가기
파이썬/기초 학습

Day 4: List,Dictionary,Set,Tuple 추가 학습

by CBROJIN 2025. 7. 26.

1) LIST

1. 리스트(List) 기본 특징

리스트는 여러 개의 값을 순서대로 저장하는 자료형으로, 숫자·문자·리스트 등 다양한 자료형을 함께 담을 수 있다.
리스트는 대괄호 []로 만든다.

data = [1, "apple", 3.14, [10, 20]]
print(data)
# 결과: [1, 'apple', 3.14, [10, 20]]

중첩 리스트 [10,20]도 하나의 인덱스를 차지한다.

 

2. 인덱싱과 슬라이싱

리스트는 인덱스(번호)로 요소를 꺼낼 수 있고, 일부 구간을 잘라내는 슬라이싱도 가능하다.
인덱스는 0부터 시작한다.

  • 리스트[n]: n번째 요소에 접근.
  • 리스트[a:b]: 인덱스 a부터 b-1까지의 요소를 잘라서 반환.
  • 중첩 리스트 접근: 리스트[x][y] 형태로 2단계 접근.
fruits = ['apple','banana','cherry','date']
print(fruits[1])    # banana
print(fruits[1:3])  # ['banana', 'cherry']
 

3. 리스트 연산

리스트끼리 더하기(+)로 합치고, 곱하기(*)로 반복할 수 있다.

nums = [1,2,3]
print(nums + [4,5])  # [1,2,3,4,5]
print(nums * 2)      # [1,2,3,1,2,3]
 

4. 리스트 요소 수정

인덱스로 특정 요소를 바꾸거나, 슬라이싱으로 여러 요소를 바꿀 수 있다.
문자열을 넣으면 글자 하나씩 나눠서 들어간다.

nums = [1,2,3,4]
nums[1] = 99
print(nums)         # [1,99,3,4]
nums[1:3] = "hi"
print(nums)         # [1,'h','i',4]
 

5. 리스트 삭제

리스트 값만 비우거나, 공간까지 없앨 수 있다.

items = ['a','b','c','d']
items[1] = ""     # 값만 비우고 자리 유지
print(items)      # ['a','','c','d']
del items[2]      # 'c'와 그 자리 삭제
print(items)      # ['a','','d']
 

6. 리스트 추가 함수

  • append(x): 맨 뒤에 x값 추가 (리스트면 통째로 한 칸).
  • insert(i, x): i 위치에 x값 삽입.
  • extend(x): x의 요소들을 풀어서 이어붙임.
nums = [1,2]
nums.append([3,4])   # [[3,4]] 한 칸으로
nums.extend([5,6])   # 5,6을 개별로 이어붙임
nums.insert(1,100)   # 인덱스 1에 100 삽입
print(nums)  # [1,100,[3,4],5,6]
 

7. 리스트 삭제 함수

  • remove(x): 값 x를 찾아 첫 번째 것 삭제.
  • pop(): 마지막 요소를 출력하고 삭제.
nums = [1,2,3,2]
nums.remove(2)     # 첫 번째 2 삭제
print(nums)        # [1,3,2]
print(nums.pop())  # 2 (꺼내면서 삭제)
print(nums)        # [1,3]
 

8. 리스트 정렬과 순서 뒤집기

  • sort(): 오름차순으로 정렬.
  • reverse(): 순서 뒤집기.
nums = [5,1,3]
nums.sort()
print(nums)    # [1,3,5]
nums.reverse()
print(nums)    # [5,3,1]
 

9. 리스트 정보 함수

  • index(x): x가 있는 첫 위치 인덱스 반환.
  • count(x): x가 몇 개 있는지 반환.
  • len(): 리스트 길이.
nums = [1,2,2,3]
print(nums.index(2))  # 1
print(nums.count(2))  # 2
print(len(nums))      # 4
 

10. 빈 리스트 초기화

[] 또는 list()로 빈 리스트를 만들고, append()extend()로 요소를 추가한다.

drawer = []
drawer.append("sock")
drawer.extend(["hat","shirt"])
print(drawer)   # ['sock','hat','shirt']
 

11. 리스트 내용만 초기화 (참조 유지)

[:] = [값들]로 내부 내용만 갈아끼운다. 다른 변수가 같은 리스트를 참조하고 있어도 내용이 같이 바뀐다.

a = [1,2,3]
b = a
a[:] = [0]
print(a,b)  # [0],[0]
 

종합 문제 (10문제)

1. banana carrot을 출력하라. 마지막 숫자를 100으로 바꾸고 출력.

basket = ['apple','banana',['carrot','daikon'],10]

 

2.아래 코드 결과를 쓰시오.

nums = [1,2,3]
nums[1:2] = "hi"
print(nums)

[1, 'h', 'i', 3]

 

3. 

animals = ['cat','dog']

[3. 문제설명]
인덱스 1에 'fox' 삽입.
맨 뒤에 ['ant','bee']를 한 칸으로 추가.
['cow','pig']를 풀어서 이어붙이기.
최종 결과 출력.

 

4. 다음 리스트를 오름차순 정렬 후 순서를 뒤집으시오. 그리고 값 2의 개수와 첫 번째 인덱스를 구하시오.

data = [9,2,5,2,1]

 

5. 아래 코드의 결과를 쓰시오.

items = [1,2,3,4]
items[1] = ""
del items[2]
print(items)

[1, ' ', 4]

 

6.

drawer = []

[6. 문제 설명]
'shirt','pants'를 추가 (extend).
['sock','hat']을 한 칸으로 추가 (append).
인덱스 1에 'jacket' 삽입.
인덱스 2의 요소를 삭제 (del). -> 최종 출력.

 

7. 아래 코드 결과를 예측하라.

nums = [1,2,3]
nums[:] = [7,8]
print(nums)

[7, 8]

 

8. 아래 코드 결과를 예측하라.

nums = [5,5,5,5]
nums.remove(5)
nums.pop()
print(nums)

[5, 5]

 

9.

nums = [3,1,4,1,5]

[9. 문제설명]
sort()와 reverse()로 내림차순 정렬.
값 1의 개수와 첫 번째 인덱스를 출력.
마지막 요소를 pop()으로 꺼내 출력 후 리스트 출력.

 

10.

nums = []

[10. 문제설명]
append()로 'apple' 추가.
extend()로 ['banana','cherry'] 추가.
인덱스 1에 'grape' 삽입. -> 최종 출력.

 

 

2) Dictionary

1. 딕셔너리(Dictionary) 기본 특징

  • 딕셔너리는 순서가 아닌 Key-Value 쌍으로 데이터를 저장한다.
  • 키(Key)는 중복될 수 없으며, 값을 빠르게 찾는 고유한 식별자 역할을 한다.
  • {} 또는 dict()로 생성할 수 있다.
dic1 = {"dog":"강아지", "cat":"고양이", "bird":"새"}
print(dic1)

dic2 = dict(dog="강아지", cat="고양이", bird="새")
print(dic2)
 

2. 빈 딕셔너리와 값 추가

빈 딕셔너리를 만든 후, 키와 값을 직접 지정해서 추가할 수 있다.

dic = {}
dic["car"] = "자동차"
dic["bike"] = "자전거"
dic["colors"] = ["빨강", "파랑", "노랑"]
print(dic)
 

3. 딕셔너리 값 삭제

del을 사용하면 특정 키와 그 값을 제거할 수 있다.

dic1 = {"dog":"강아지", "cat":"고양이", "bird":"새"}
print(dic1)
del dic1["bird"]
print(dic1)
 

4. 딕셔너리의 키와 값 특징

  • 키(Key)는 문자열, 숫자, 튜플처럼 변경 불가능(Immutable)한 타입만 가능하다.
  • 같은 키에 새 값을 넣으면 기존 값이 덮어쓰기 된다.(값을 누적해서 추가하려면 리스트를 활용)
  • 값(Value)은 리스트, 딕셔너리 등 어떤 자료형도 가능하다.
dic = {"score":10}
dic["score"] = 20  # 덮어쓰기

# 리스트는 키로 사용할 수 없어 에러 발생
dic[[1,2]] = "불가능"

# 값은 다양한 타입 가능
dic[0] = [5,10,15]
dic[True] = {"A":1, "B":2}
print(dic)

dic = {"fruit": ["apple"]}  # 처음부터 리스트로 저장
dic["fruit"].append("banana")  # 기존 리스트에 추가
print(dic)  # {'fruit': ['apple', 'banana']}
 

5. 딕셔너리 주요 메서드

  1. x.keys(): 모든 키를 dict_keys 형태로 반환.
  2. x.values(): 모든 값을 dict_values 형태로 반환.
  3. x.items(): (키, 값) 쌍을 dict_items 형태로 반환.
  4. x.clear(): 모든 키와 값 삭제.
  5. x.get(key, 기본값): 키가 없으면 기본값 반환.
  6. key in x: 키 존재 여부를 True/False로 반환.
users = {"철수":30, "영희":28, "민수":35}

print(users.keys())
keys_list = list(users.keys())
keys_list.append("지수")
print("새 리스트:", keys_list)
print("원래 키 목록:", list(users.keys()))

print(users.values())
print(list(users.values()))
print("(키, 값) 쌍:", users.items())

print(users.get("하늘","없음"), users.get("철수","없음"))

print('영희' in users)
print('다현' in users)

users.clear()
print(users)
 

종합 문제 (5문제)

1. 아래 딕셔너리에 bus 키를 추가해 값으로 버스를 넣고, fruits 키에 ["사과","포도"] 리스트를 추가해 출력하라.

dic = {"car":"자동차", "bike":"자전거"}

 

2. 다음 코드의 출력 결과를 예측하라.

dic = {"level":1}
dic["level"] = 3
dic[False] = [100,200]
print(dic)

{'level' : 3, False : [100,200]}

 

3. 다음 딕셔너리의 키들을 리스트로 변환해 "지훈"을 추가하고 출력하라.

users = {"철수":30, "영희":28, "민수":35}

 

4. del을 이용해 아래 딕셔너리에서 "cat" 키를 삭제하고 출력하라.

dic = {"dog":"강아지", "cat":"고양이", "bird":"새"}

 

5. 아래 코드의 출력 결과를 예측하라.

users = {"철수":30, "영희":28}
print(users.get("지수","없음"))
print('영희' in users)
users.clear()
print(users)

없음

True

{}

 

3) Tuple

1. 튜플(Tuple) 기본 특징

  • 튜플은 리스트와 비슷하지만, 내부 값(요소)을 수정할 수 없다 (Immutable).
  • 대괄호([]) 대신 소괄호(())로 만든다.
  • 요소가 하나만 있는 튜플은 콤마(,)를 붙여야 한다.
  • 괄호 없이 콤마만으로도 튜플 생성 가능하다.
t1 = (1, 2, 3)
t2 = ("apple",)    # 하나짜리 튜플 (콤마 필수)
t3 = "banana", 10  # 괄호 없이도 가능
print(t1, t2, t3)
 

2. 튜플에 들어갈 수 있는 값

  • 튜플에는 숫자, 문자열, 리스트, 딕셔너리 등 어떤 자료형이든 저장 가능하다.
  • 튜플 자체는 변경할 수 없지만, 안에 있는 리스트나 딕셔너리 같은 Mutable 객체는 수정 가능하다.
mutable_list = [1, 2, 3]
t = (mutable_list, {"key":"value"}, ("a","b"))
print(t)

mutable_list[1] = 99         # 튜플 안 리스트 수정 가능
t[1]["key"] = "changed"      # 튜플 안 딕셔너리 수정 가능
print(t)
 

3. 튜플 연산

  • 인덱싱(indexing), 슬라이싱(slicing) 가능.
  • +튜플 결합, *반복 출력 가능.
t1 = (1,2,3)
t2 = ("A",)
print(t1 + t2)     # (1,2,3,'A')
print(t2 * 3)      # ('A','A','A')
 

4. 튜플 읽기 전용 메서드

  • index(x): 값 x의 첫 번째 위치 인덱스.
  • count(x): 값 x가 몇 개 있는지 반환.
  • len(): 튜플 길이.
t = (10, 20, 10, 30)
print(t.index(10))   # 0
print(t.count(10))   # 2
print(len(t))        # 4
 

5. 튜플 사용 이유

  • 값이 변하지 않아야 할 데이터 보관 (예: 좌표, 설정값).
  • 딕셔너리의 키(key)나 집합(set)의 원소로 사용 가능 (리스트는 불가능).
 

종합 문제 (5문제)

1. 아래 튜플에서 두 번째(banana)와 세 번째(cherry) 요소를 출력하고, 튜플의 길이를 출력하라.

fruits = ("apple", "banana", "cherry", "date")

 

 

2. 다음 코드의 출력 결과를 예측하라.

numbers = (1,2,3)
numbers = numbers + (4,5)
print(numbers * 2)

(1,2,3,4,5,1,2,3,4,5)

 

3. 튜플 안의 리스트를 수정해 마지막 값(20)을 99로 바꾸고 출력하라.

t = ([10,20,30], {"a":1}, (5,6))

 

4. 아래 코드의 출력 결과를 예측하라.

t = ("x",) * 4
print(t, len(t))

('x', 'x', 'x', 'x') 4

 

5. 아래 튜플에서 값 15의 첫 번째 인덱스와 개수를 출력하라.

nums = (10,15,15,20,15,25)

 

 

4) Set

1. 집합(Set) 기본 특징

  • 중괄호 {}로 선언하며, 중복이 없는 데이터 집합을 만든다.
  • 요소의 순서가 없으며, 같은 값이 여러 번 들어가도 한 번만 저장된다.
  • 딕셔너리를 set()으로 변환하면 key만 집합으로 추출된다.
s1 = {5, 2, 7, 5, 1}
print(s1)  # 중복 제거, 순서 없이 출력
 

2. set()으로 다른 자료형 변환

  • set(문자열)은 문자열을 문자 하나씩 쪼개서 집합으로 만든다.
  • set(리스트/튜플)은 각 원소를 그대로 집합으로 만든다.
  • set(딕셔너리)는 key만 집합으로 추출된다.
text = "Python!!"
s_chars = set(text)  # 문자 단위 분리
print(s_chars)

nums = [1,2,2,3,4]
s_nums = set(nums)  # 중복 제거
print(s_nums)

dic = {"a":1, "b":2}
s_dic = set(dic)
print(s_dic)  # {'a','b'} (key만)
 

3. 집합은 인덱싱, 슬라이싱 불가

  • 순서가 없기 때문에 인덱스로 접근 불가능.
  • 리스트나 튜플로 변환해 인덱싱이나 슬라이싱을 사용할 수 있다.
chars = set("apple")
chars_list = list(chars)
print(chars_list[0], chars_list[1:])
 

4. 집합 연산 (교집합, 합집합, 차집합)

  • & 또는 intersection() : 교집합
  • | 또는 union() : 합집합
  • - 또는 difference() : 차집합 (순서 주의)
a = {1,2,3,4}
b = {3,4,5,6}

print(a & b)                  # 교집합
print(a | b)                  # 합집합
print(a - b, b - a)           # 차집합 (방향 따라 결과 다름)
 

5. 집합 메서드

  • add(x): 값 하나 추가.
  • update(iterable): 여러 값 한꺼번에 추가.
  • remove(x): 값 하나 제거.
  • 집합 원소는 immutable 타입만 가능 (문자열, 숫자, 튜플 등). 리스트는 mutable이라 불가능.
s = {1,2}
s.add("hi")
s.add((1,2))
print(s)

s.update([3,4,5])
s.update("ab")
print(s)

s.remove("hi")
print(s)
 

종합 문제 (5문제)

1. 문자열 "Programming!!!"을 집합으로 변환해 중복 문자를 제거한 후 출력하라.
결과 집합을 리스트로 변환해 앞 3개 요소만 출력하라.

 

2. 아래 리스트의 중복을 제거하고, 집합으로 변환한 뒤 다시 튜플로 변환해 두 번째 요소와 마지막 요소를 출력하라.

data = [10,20,10,30,40,30,50]

 

 

3. 두 집합의 교집합, 합집합, 차집합을 구하고 각각 출력하라.

x = {2,4,6,8}
y = {4,8,12,16}

 

4. 빈 집합을 만든 뒤, add()로 문자열 하나와 튜플 하나를 추가하고, update()[1,2,3]을 추가한 후 출력하라.
그 후, 추가한 문자열을 remove()로 삭제하라.

 

5. 다음 코드의 출력 결과를 예측하라.

s = set("applepie")
s.update("banana")
print(s)
s.remove("b")
print(s)

{'a','p','l','e','i','b','n'}

{'a','p','l','e','i','n'}