사전 자료형
다른 언어에서는 해시테이블 등으로 불림
data = dict()
data['사과'] = 'apple'
data['바나나'] = 'banana'
data['코코넛'] = 'coconut'
print(data)
if '사과' in data:
print("'사과'를 키로 가지는 데이터가 존재합니다.")
{'사과': 'apple', '바나나': 'banana', '코코넛': 'coconut'}
'사과'를 키로 가지는 데이터가 존재합니다.
문자열을 처리할 때 훨씬 빠르다
키데이터와 값 데이터를 별도로 출력할 수 있다
a = dict()
a['홍길동'] = 97
a['이순신'] = 98
print(a)
b = {
"홍길동" : 97,
"이순신" : 98
}
print(b)
print(b['이순신'])
key_list = list(b.keys()) # 키 데이터만 담은 리스트 keys() 하나의 객체로 반환-> LIST형태로 형변환
print(key_list)
# 값 데이터만 담은 리스트 values()
value_list = list(b.values())
print(value_list)
{'홍길동': 97, '이순신': 98}
{'홍길동': 97, '이순신': 98}
98
['홍길동', '이순신']
[97, 98]
집합 자료형
중복 허용 안함
순서가 없음
데이터가 존재하는지 여부만 체크할 때 사용
리스트 혹은 문자열을 이용하여 초기화
set() 함수 혹은 {,} 사용
data = set([1, 1, 2, 3, 4, 4, 5])
print(data)
data = {1, 2, 3, 4, 4, 5}
print(data)
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
집합연산
합집합: A | B
교집합: A & B
차집합: A - B
a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])
print(a | b)
print(a & b)
print(a - b)
{1, 2, 3, 4, 5, 6, 7}
{3, 4, 5}
{1, 2}
data = set([1, 2, 3])
print(data)
# 새로운 원소 추가
data.add(4)
print(data)
# 새로운 원소 여러 개 추가
data.update([5,6])
print(data)
# 특정한 값을 가지는 원소 삭제
data.remove(3)
print(data)
#특정한 원소가 존재하는지 조회, 하나의 원소 조회 및 삭제할 때 상수의 시간 소요
#리스트나 튜플은 순서가 존재해서 인덱싱을 통해 자료형의 값을 접근
#사전이나 집합 자료형은 별도의 순서가 없어서 인덱싱을 통해서 얻을 수 없고 사전의 키(key) 혹은 집합의 원소(Element)를 이용해 0(1)의 시간 복잡도를 가진다
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2, 4, 5, 6}
기본 입출력
표준 입력 방법
input() 한 줄의 문자열을 입력 받는 함수
map() 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용
공백을 기준으로 구분된 데이터를 입력 받을 때
list(map(int, input().split())
공백을 기준으로 구분된 데이터의 개수가 많지 않다면,
a, b, c = map(int, input().spilit())
a, b, c = list(map(int, input().split())) # packing-> unpacking
print(a, b, c)
print(a)
print(b)
print(c)
34 57 87
34 57 87
34
57
87
sys.stdin.readline() # 입력을 최대한 빠르게 받는 메서드
rstrip() # 엔터(Enter) 줄 바꿈 기호 입력
import sys
# 문자열 입력받기
data = sys.stdin.readline().rstrip()
print(data)
표준 출력 방법
print() 함수
콤마 (,) 를 이용하여 띄어쓰기로 구분하여 출력
기본적으로 출력 이후에 줄 바꿈을 수행
줄 바꿈을 원치 않는 경우 'end' 속성 이용
a = 1
b = 2
print(a, b)
print(6, end=" ")
print(7, end=" ")
answer = 7
print("정답은 " + str(answer) + "입니다.")
1 2
6 7 정답은 7입니다.
f-string
수 데이터를 다시 문자열로 바꾸고 더하지 않아도된다
answer = 7
print(f"정답은 {answer}입니다.")
정답은 7입니다.
조건문
x = 15
if x >= 10:
print("x >= 10")
if x >= 0:
print("x >= 0")
if x >= 30:
print("x >= 30")
x >= 10
x >= 0
if~elif~else
if 조건문 1:
조건문 1이 True일 때 실행되는 코드
elif 조검문 2:
조건문 1에 해당하지 않고, 조건문 2가 True일 때 실행되는 코드
else:
위에 있는 모든 조건문이 모두 True 값이 아닐 때 실행되는 코드
비교 연산자
대입 연산자(=) 와 같음 연산자(==) 차이점 유의
논리 연산자 => 어떤 범주안에 속하는 값인지 체크하고자 할때
X and Y 둘 다 참(True)
X or Y 둘 중 하나만 참(True)
not X X가 거짓(False)라면 참(True)
in 연산자 not in 연산자
리스트, 튜플, 문자열, 딕셔너리 모두 사용 가능
x in 리스트 해당 리스트 안에 x가 포함되어있을 때 참(True)
x not in 리스트 해당 리스트 안에 x가 포함되어 있지 않을 때 참(True)
pass 키워드
조건문 처리하는 부분을 비워놓고 싶을 때.
# 조건문의 소스코드가 한줄이면 줄바꿈 하지 않고 간략하게 표현
score = 85
if score >= 80: result = "Success"
else: result = "Fail"
# 조건부 표현식(Conditional Expression)은 if~else문을 한 줄에 작성하도록 해줌
score = 85
result = "Success" if score >= 80 else "Fail"
print(result)
파이썬의 조건문은 수학의 부등식을 그대로 사용할 수 있음
1~9까지의 모든 정수의 합 구하기
i = 1
result = 0
while i <= 9:
result += i
i += 1
print(result)
# 1부터 9까지의 홀수의 값 구하기
i = 1
result = 0
while i <= 9:
if i % 2 ==1:
result += i
i += 1
print(result)
for문
for 변수 in 리스트:
실행할 소스코드
array = [9, 8, 7, 6, 5]
for i in array:
print(x)
연속적인 값 차례대로 순회 range()
range(시작 값, 끝 값 +1)
result = 0
for i in range(1, 31):
result += i
print(result)
continue 반복문에서 남은 코드의 실행을 건너띄고, 다음 반복을 진행
# 1부터 9까지의 홀수의 합 구하기
result = 0
for i in range(1, 10):
if i % 2 == 0:
continue
result += i
print(result)
break 반복문 즐시 탈출
#1부터 5까지의 정수 차례대로 출력
i = 1
while True:
print("현재 i의 값:", i)
if i == 5:
break
i += 1
함수와 람다 표현식
def 함수명(매개변수):
실행할 소스코드
return 반환 값
global 키워드
함수의 바깥쪽에서 선언된 변수를 바로 참조하기 위해서
함수내에서 지역변수를 만들 지않고
a = 0 # 전역변수
def func():
global a # 전역변수로 선언된 값을 초기화 하고 싶을 때 필요
a += 1
for i in range(10):
func()
print(a)
전역변수로 선언된 변수 말고 동일한 함수 내 지역변수를 우선 참조(만약 같은 변수명 사용시 참고)
파이썬은 여러개의 반환값을 가질 수 있음
def operator(a, b):
add_var = a + b
subtract_var = a - b
multiply_var = a * b
divide_var = a / b
return add_var, subtract_var, multiply_var, divide_var # packing
a, b, c, d = operator(7, 3) # unpacking
print(a, b, c, d)
람다 표현식- > 이름 없는 함수
# 람다 표현식으로 구현한 add() 메서드
print((lambda a, b: a + b)(3, 7))
# 내장 함수에서 자주 사용되는 람다 함수
array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
def my_key(x):
return x[1]
print(sorted(array, key=my_key)) # 함수 정의 이용
print(sorted(array, key=lambda x: x[1])) # lambda 이용
[('이순신', 32), ('홍길동', 50), ('아무개', 74)]
[('이순신', 32), ('홍길동', 50), ('아무개', 74)]
# 여러 개의 리스트에 적용
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
result = map(lambda a, b: a + b, list1, list2)
print(list(result))
실행 결과
[7, 9, 11, 13, 15]