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. 딕셔너리 주요 메서드
- x.keys(): 모든 키를 dict_keys 형태로 반환.
- x.values(): 모든 값을 dict_values 형태로 반환.
- x.items(): (키, 값) 쌍을 dict_items 형태로 반환.
- x.clear(): 모든 키와 값 삭제.
- x.get(key, 기본값): 키가 없으면 기본값 반환.
- 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'}
'파이썬 > 기초 학습' 카테고리의 다른 글
Day 6: 조건문 & 반복문 추가학습 (2) | 2025.08.01 |
---|---|
Day 5: 반복문(while,for) 추가 학습 (3) | 2025.07.30 |
Day 3: 함수 정의 & 파일 처리 학습 (3) | 2025.07.24 |
Day 2: 조건문 & 반복문 + 입력 처리 (2) | 2025.07.21 |
Day 1: 자료형 & 연산자 (3) | 2025.07.19 |