🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
Lang
python
04-자료구조

1. 리스트

1.1 리스트(다른 언어의 배열)

1
# 지하철 칸별로 10명, 20명, 30명 승차
2
subway1 = 10
3
subway2 = 20
4
subway3 = 30
5
6
subway = [10, 20, 30]
7
print(subway) # [10, 20, 30]

1.2 append, pop

1
subway = ["푸", "피글렛", "티거"]
2
print(subway) # ['푸', '피글렛', '티거']
3
4
# 피글렛이 몇 번째 칸에 탔는가?
5
print(subway.index("피글렛")) # 1
6
7
# 이요르 탑승
8
subway.append("이요르")
9
print(subway) # ['푸', '피글렛', '티거', '이요르']
10
11
# 루를 푸와 피글렛 사이(인덱스 1 위치)에 삽입
12
subway.insert(1, "루")
13
print(subway) # ['푸', '루', '피글렛', '티거', '이요르']
14
15
# 지하철 역마다 한 명씩 내림
16
print(subway.pop()) # 이요르 내림
17
print(subway)
18
print(subway.pop()) # 티거 내림
19
print(subway)
20
print(subway.pop()) # 피글렛 내림
21
print(subway)
22
23
# 지하철에서 모두 내림
24
subway.clear()
25
print(subway) # []

1.3 요소개수, count

1
# 같은 이름이 몇 명 있는지 확인
2
subway = ["푸", "피글렛", "티거"]
3
subway.append("푸") # 푸 추가
4
5
print(subway) # ['푸', '피글렛', '티거', '푸']
6
print(subway.count("푸")) # 2

1.4 정렬-sort-reverse

1
num_list = [5, 2, 4, 3, 1]
2
3
num_list.sort() # 👉 오름차순 정렬
4
print(num_list) # [1, 2, 3, 4, 5]
5
6
num_list.sort(reverse=True) # 👉 내림차순 정렬
7
print(num_list) # [5, 4, 3, 2, 1]
8
9
num_list.reverse() # 👉 순서 뒤집기
10
print(num_list) # [1, 2, 3, 4, 5]
11
12
13
my_list = [1, 3, 2]
14
15
my_list.sort() # 리스트 정렬
16
print(my_list) # my_list 리스트 데이터 변경, [1, 2, 3]
17
18
your_list = [1, 3, 2]
19
new_list = sorted(your_list) # 정렬할 리스트를 소괄호 안에 넣음
20
21
print(your_list) # your_list 리스트 데이터는 변경되지 않음, [1, 2, 3]
22
print(new_list) # 정렬된 새로운 리스트, [1, 2, 3]

1.5 리스트 확장

1
mix_list = ["푸", 20, True, [5, 2, 4, 3, 1]]
2
print(mix_list) # ['푸', 20, True, [5, 2, 4, 3, 1]]
3
4
5
mix_list = ["푸", 20, True]
6
num_list = [5, 2, 4, 3, 1]
7
num_list.extend(mix_list) # 리스트 합치기
8
print(mix_list) # ['푸', 20, True]
9
print(num_list) # [5, 2, 4, 3, 1, '푸', 20, True]

2. 딕셔너리 : 키와 값이 있는 구조

1
cabinet = {3: "푸", 100: "피글렛"}
2
3
print(cabinet[3]) # key 3에 해당하는 value, 푸
4
print(cabinet[100]) # key 100에 해당하는 value, 피글렛
5
6
print(cabinet.get(3)) # key 3에 해당하는 value, 푸
7
8
print(cabinet.get(5)) # None
9
print("hi")
10
# print(cabinet[5]) # KeyError 발생
11
print("hi")
12
13
print(cabinet.get(5, "사용 가능")) # key에 해당하는 값이 없으면 기본값을 사용하게 함, 사용 가능
14
15
print(3 in cabinet) # True
16
print(5 in cabinet) # False
17
18
19
cabinet = {"A-3": "푸", "B-100": "피글렛"}
20
print(cabinet["A-3"]) # 푸
21
print(cabinet["B-100"]) # 피글렛
22
23
print("곰" in "곰돌이") # True
24
print("돌이" in "곰돌이") # True
25
print("푸" in "곰돌이") # False

2.1 값 변경, 추가, 삭제

1
cabinet = {"A-3": "푸", "B-100": "피글렛"}
2
3
print(cabinet) # {'A-3': '푸', 'B-100': '피글렛'}
4
5
cabinet["A-3"] = "티거" # key에 해당하는 값이 있을 때 -> 값 변경
6
cabinet["C-20"] = "이요르" # key에 해당하는 값이 없을 때 - > 값 추가
7
8
9
print(cabinet) # {'A-3': '티거', 'B-100': '피글렛', 'C-20': '이요르'}
10
11
del cabinet["A-3"] # key 'A-3'에 해당하는 값 삭제
12
print(cabinet) # {'B-100': '피글렛', 'C-20': '이요르'}

2.2 key, value만

1
cabinet = {"A-3": "푸", "B-100": "피글렛"}
2
3
print(cabinet.keys()) # key만 출력
4
5
print(cabinet.values()) # value만 출력
6
7
print(cabinet.items()) # key, value 한 쌍으로 출력
8
9
cabinet.clear() # 값 전체 삭제
10
print(cabinet)

3. 튜플 : 내용 변경이 없을 때 사용

1
menu = ("돈가스", "치즈돈가스")
2
print(menu[0]) # 돈가스
3
print(menu[1]) # 치즈돈가스
4
5
name = "피글렛"
6
age = 20
7
hobby = "코딩"
8
print(name, age, hobby) # 피글렛 20 코딩
9
10
11
(name, age, hobby) = ("피글렛", 20, "코딩")
12
print(name, age, hobby) # 피글렛 20 코딩
13
14
(departure, arrival) = ("김포", "제주")
15
print(departure, ">", arrival) # 김포 > 제주
16
17
(departure, arrival) = (arrival, departure)
18
print(departure, ">", arrival) # 제주 > 김포

4. 셋(set)

1
""" 집합(set)
2
중복안됨, 순서없음
3
"""
4
my_set = {1, 2, 3, 3, 3}
5
print(my_set) # {1, 2, 3}
6
7
java = {"푸", "피글렛", "티거"} # 자바 개발자 세트
8
python = set(["푸", "이요르"]) # 파이썬 개발자 세트
9
10
# 교집합(자바와 파이썬을 모두 다룰 수 있는 개발자)
11
print(java & python) # {'푸'}
12
print(java.intersection(python)) # {'푸'}
13
14
# 합집합(자바 또는 파이썬을 다룰 수 있는 개발자)
15
print(java | python) # {'이요르', '티거', '푸', '피글렛'}
16
print(java.union(python)) # {'이요르', '티거', '푸', '피글렛'}
17
18
# 차집합(자바는 할 수 있지만 파이썬은 할 줄 모르는 개발자)
19
print(java - python) # {'피글렛', '티거'}
20
print(java.difference(python)) # {'피글렛', '티거'}
21
22
# 파이썬 개발자 추가(기존 개발자: 푸, 이요르)
23
python.add("피글렛")
24
print(python) # {'푸', '이요르', '피글렛'}
25
26
# 자바 개발자 삭제(기존 개발자: 푸, 피글렛, 티거)
27
java.remove("피글렛")
28
print(java) # {'푸', '티거'}

5. 자료구조 변환

1
menu = {"커피", "우유", "주스"}
2
print(menu) # {'주스', '커피', '우유'}
3
print(type(menu)) # <class 'set'>
4
5
menu = list(menu) # 리스트로 변환
6
print(menu, type(menu)) # ['주스', '커피', '우유'] <class 'list'>
7
8
menu = tuple(menu) # 튜플로 변환
9
print(menu, type(menu)) # ('주스', '커피', '우유') <class 'tuple'>
10
11
menu = set(menu) # 세트로 변환
12
print(menu, type(menu)) # {'주스', '커피', '우유'} <class 'set'>

6. 퀴즈

6.1 당첨자뽑기1

1
"""
2
Quiz) 학교에서 파이썬 코딩 대회를 주최합니다.
3
참석률을 높이기 위해 댓글 이벤르를 진행합니다.
4
댓글 작성자 중 추점을 통해 1명은 치킨, 3명은 커피 쿠폰을 받습니다.
5
추첨 프로그램을 작성하시오.
6
7
조건 1 : 편의상 댓글은 20명이 작성했고, 아이디는 1~20이라고 가정
8
조건 2 : 댓글 내용과 상관없이 무작위로 추첨하되 중복 불가
9
조건 3 : random 모듈의 shuffle과 sample을 활용
10
11
(출력 예제)
12
-- 당첨자 발표 --
13
치킨 당첨자 : 1
14
커피 당첨자 : [2, 3, 4]
15
-- 축하합니다! --
16
17
(활용 예제)
18
from random import *
19
lst = [1, 2, 3, 4, 5]
20
print(lst)
21
shuffle(lst)
22
print(lst)
23
print(sample(lst, 1))
24
"""
25
# 방법1
26
from random import *
27
28
users = range(1, 21) # 리스트 생성, 1부터 21 직전(20)까지 연속한 숫자 모음
29
users = list(users) # users를 리스트 자료구조로 변환
30
shuffle(users) # 리스트 섞기
31
winners = sample(users, 4) # users 리스트에서 중복 없이 4명 추첨
32
33
print("-- 당첨자 발표 -- ") # 당첨자 출력
34
print("치킨 당첨자 : {0}".format(winners[0])) # 0번째 인덱스(1명)
35
print("커피 당첨자 : {0}".format(winners[1:])) # 1번째부터 마지막까지 슬라이싱(3명)
36
print("-- 축하합니다! --")

6.2 당첨자뽑기2

1
"""
2
Quiz) 학교에서 파이썬 코딩 대회를 주최합니다.
3
참석률을 높이기 위해 댓글 이벤르를 진행합니다.
4
댓글 작성자 중 추점을 통해 1명은 치킨, 3명은 커피 쿠폰을 받습니다.
5
추첨 프로그램을 작성하시오.
6
7
조건 1 : 편의상 댓글은 20명이 작성했고, 아이디는 1~20이라고 가정
8
조건 2 : 댓글 내용과 상관없이 무작위로 추첨하되 중복 불가
9
조건 3 : random 모듈의 shuffle과 sample을 활용
10
11
(출력 예제)
12
-- 당첨자 발표 --
13
치킨 당첨자 : 1
14
커피 당첨자 : [2, 3, 4]
15
-- 축하합니다! --
16
17
(활용 예제)
18
from random import *
19
lst = [1, 2, 3, 4, 5]
20
print(lst)
21
shuffle(lst)
22
print(lst)
23
print(sample(lst, 1))
24
"""
25
26
# 방법2
27
from random import *
28
29
users = list(range(1, 21)) # range()를 list()로 바로 감싸서 한 줄 줄이기
30
shuffle(users)
31
chicken_winner = sample(users, 1) # 치킨 당첨자 1명 추첨
32
remain_users = set(users) - set(chicken_winner) # 전체 집합에서 치킨 당첨자 집합 제외
33
coffee_winners = sample(remain_users, 3) # 남은 19명 중에서 3명 추첨
34
35
print("-- 당첨자 발표 --")
36
print("치킨 당첨자 : {0}".format(chicken_winner))
37
print("커피 당첨자 : {0}".format(coffee_winners))
38
print("-- 축하합니다! --")