카테고리 없음

[이것이 코딩 테스트다 with 파이썬] 2일차

둉영 2023. 7. 11. 23:23

사전 자료형

다른 언어에서는 해시테이블 등으로 불림

 

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]