7장 파이썬 자료구조
파이썬의 자료구조
파이썬에서 자료들을 저장하는 여러 가지 구조들을 자료 구조라고 한다. 기장 기본적인 구조는 시퀀스 로 리스트가 이의 대표적인 예이다. 시퀀스는 요소들을 가지고 있고, 각 요소들이 순차적인 인덱스로 분류된다. 시퀀스는 앞 장의 리스트로 알아보았기 때문에 이번 장에서는 다루지 않는다.
튜플
튜플은 간단하게 정의하면 값이 정해진 후에는 변경할 수 없는 리스트이다. 하지만 튜플의 요소를 데이터로 쓰는 연산을 반환하거나 새로운 요소를 추가할 수는 있다. 이러한 튜플은 하나의 변수인데, 이를 패킹하였다 라고 하고, 반대로 언패킹하여 각 요소들을 반환할 수도 있다. 퓨틀의 장점은 변경 불가능한 객체이기 때문에 빠르고 간단하다. 또한 앞에서 다룰 딕셔너리의 키가 될 수 있다.
리스트는 변경 가능하기 때문에 딕셔너리의 키가 될 수 없다.
세트
세트는 고유한 값들을 저장하는 자료구조이다. 튜플과는 다르게 순차적인 인덱스가 없어 위치에 따라 접근 할 수 없다.
특정 순서를 유지할 필요가 없어 리스트 연산보다 빠르다. 하지만 중복 힝목은 없어야 한다. 요소의 추가와 삭제는 값에 의한
호출으로만 가능하며 삭제하려는 요소가 있는지 확실하지 않을 경우에는 discard()를 호출하여 삭제한다. 세트 또한 리스트의 함축 연산과 같은 방식으로 세트 함축 연산을 사용할 수 있다. 리스트와 세트를 변환하여 문제를 해결할 수도 있다.
딕셔너리
딕셔너리는 "값"과 "키"로 이루어진 쌍의 형태로 데이터가 저장되고, "키" 값을 통해 "값"의 값을 알 수 있다. 이때 "키" 가 리스트의 인덱스 역할을 하며 요소의 접근과 추가에도 동일하게 적용된다. 인덱스가 들어갈 자리에 "키" 값을 넣고 그에 대응하는 "값"을
대입연산자를 이용해 작성하면 된다. 딕셔너리 또한 함축을 사용할 수 있다.
문자열
문자열 또한 하나의 자료구조이다. 문자열도 크게 보면 시퀀스에 속하지만 매우 자주 쓰기 때문에 따로 분류되었다. 내장 함수를
활용하여 쉽게 제어힐 수 있다.
문자열 메소드
파이썬에서 사용되는 모든 데이터는 객체이다. 객체는 내부에 많은 함수들을 가지고 있고 메소드는 객체 안의 함수를 뜻한다.
객체에서 메소드를 호출하는 방법은 객체 뒤에 "."을 찍고 메소드의 이름과 ()를 붙이는 것이다. () 안에는 상황에 따라 여러 인수가 들어갈 수 있다.
python_7_func.py)
import random
# 1
# 함수 X
# 2
# 함수 X
# 3
# 함수 X
# 4
# 함수 X
# 5
# 함수 X
# 6
# 함수 X
# 7
def makedate():
d = dict()
while(True):
date_k = input("날짜를 입력하시오:")
if date_k == "":
break
date_v = input("일정을 입력하시오:")
if date_k in d: d[date_k].append(date_v)
else: d[date_k] = [date_v]
print("__일정 목록__")
for date, events in d.items():
print(f"{date}: {', '.join(events)}")
# 8
def tranEng():
lst = [ "January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December" ]
month = dict({x:y for x,y in zip(range(1, 13),lst)})
k = int(input("달의 번호:"))
print(f"달의 번호:{month[k]}")
# 9
def findchar(s1, s2):
s1 = set(s1)
s2 = set(s2)
print(f"모두 포함된 글자: {s1&s2}")
# 10
# 함수 X
# 11
def QnA(d):
for a, q in d.items():
cnt = 1
print(f"{q}")
for b in d.keys():
print(f"({cnt}) {b}", end=" ")
cnt += 1
print()
in_a = input("")
if in_a == a: print("정답입니다!")
else: print("다시 공부하세요.")
# 12
def censorship(s1):
words = input("금칙어를 입력하세요: ")
words = words.split(" ")
for word in words:
s1 = s1.replace(word, '*' * len(word))
print(s1)
# 13
def countcharint(s1):
d = dict ({ "word": 0, "digit": 0})
for a in s1:
if a.isalpha():
d["word"] += 1
elif a.isdigit():
d["digit"] += 1
print(d)
# 14
def replace_date(s1):
print(f"{s1} -> ", end="")
s1 = s1.split("/")
s1 = ''.join(s1)
s1 = s1[-4:] + s1[:-4]
print(s1)
# 15
def selfinfo(d):
for name, nation in d.items():
print(f"Hi! I'm {name} and i'm form {nation}")
# 16
def makeotp():
s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*"
otp = "".join(random.sample(s, 8))
print(otp)
python_7_main.py)
import python_7_func as func
def main():
# 1
lst = [80, 20, 20, 30, 60, 30]
print(f"주어진 리스트: {lst}")
lst = list(set(lst))
lst.sort()
print(f"정리된 리스트: {lst}")
# 2
lst = dict({x : x*x for x in range(1, 11)})
print(lst)
# 3
d = {"Apple": 1, "Banana": 2, "Grape": 3}
for k, v in d.items():
print(f"{k} -> {v}")
# 4
d = ({x :x*10 for x in range(1,7)})
k = int(input("키를 입력하시오:"))
if k in d:
print("키 {k}은 딕셔너리에 있습니다.")
# 5
d = {"옷": 100, "컴퓨터": 2000, "모니터": 320}
print(f"총합계= {sum(d.values())}")
# 6
c = ["red", "green", "blue"]
v = ["#FF0000", "#008000", "#0000ff"]
d = dict(zip(c, v))
print(f"colors = {c}")
print(f"values = {v}")
print(d)
# 7
func.makedate()
# 8
func.tranEng()
# 9
s1 = input("첫 번째 문자열:")
s2 = input("두 번째 문자열:")
func.findchar(s1, s2)
# 10
s1 = set({x for x in range(10, 61, 10)})
s2 = set({x for x in range(30, 81, 10)})
print(f"어느 한쪽에만 있는 요소들{set(sorted((s1|s2)-(s1&s2)))}")
# 11
problems = { "2": "1+1은?", "4": "2+2는?"}
func.QnA(problems)
# 12
s1 = input("문자열을 입력하시오:")
func.censorship(s1)
# 13
s1 = input("")
func.countcharint(s1)
# 14
s1 = input("")
func.replace_date(s1)
# 15
d = dict({"park": "korea",
"sam": "USA",
"sakura": "japen"})
func.selfinfo(d)
# 16
func.makeotp()
if __name__ == "__main__":
main()
첫댓글 1. if __name__ == "__main__": 의미를 설명하라.
2. import <모듈> -> 문장을 실행하면 무슨일이 일어나는지 자세히 설명할것
3. 모듈은 소스코드인가 실행파일인가?
4. 파이썬 모듈의 종류를 조사하라.
네 조사해서 따로 올리겠습니다.