Python 기초문법(2)
👉 튜플
- 리스트와 비슷하지만 불변인 자료형
- 딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어 사용해야 할 때 많이 쓰인다.
a_dict = [('bob','24'),('john','29'),('smith','30')]
👉 집합
- 중복 제거가 가능하고, 교집합/합집합/차집합 구할 수 있다.
a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']
print(a & b) # 교집합
print(a | b) # 합집합
👉 f-string
- 변수로 더 직관적인 문자열을 만들 수 있다.
for s in scores:
name = s['name']
score = str(s['score'])
print(f'{name}은 {score}점입니다')
👉 예외처리 (try - except)
- 에러가 있어도 건너뛰게 할 수 있는 방법 (남용x)
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'bobby'}, #bobby는 나이가 없어서 에러가 나지만,
{'name': 'red', 'age': 32},
]
for person in people:
try:
if person['age'] > 20:
print (person['name'])
except: #try except 구문을 이용하면 에러를 넘길 수 있다.
name = person['name']
print(f'{name} - 에러입니다')
👉 파일 불러오기
- 메서드를 만든 파일을 다른 파일에서 import하면 속성들 사용 가능
#main_test.py
from main_func import *
say_hi()
#------------------------------
#main_func.py
def say_hi():
print('안녕!')
👉 if문 삼항연산자 (한 줄로 쓰기)
num = 3
if num%2 == 0:
result = "짝수"
else:
result = "홀수"
print(f"{num}은 {result}입니다.")
#-------------------------------------
num = 3
result = "짝수" if num%2 == 0 else "홀수"
print(f"{num}은 {result}입니다.")
👉 for문 한 줄로 쓰기
a_list = [1, 3, 2, 5, 1, 2]
b_list = []
for a in a_list:
b_list.append(a*2)
print(b_list)
#-------------------------------
a_list = [1, 3, 2, 5, 1, 2]
b_list = [a*2 for a in a_list]
print(b_list)
알고리즘(Algorithm -1)
✍️ 최대값 찾기
[3, 5, 6, 1, 2, 4]
Q1. 각 숫자마다 모든 다른 숫자와 비교해서 최대값인지 확인하는 방법. (다른 모든 값보다 크다면 반복문 중단)
def find_max_num(array):
for num in array:
for compare_num in array:
if num < compare_num:
break
else:
return num
Q2. 가장 큰 수를 저장할 변수를 만들고, 배열을 돌아가면서 그 변수와 비교해서 대입하는 방법.
def find_max_num(array):
max_num = array[0]
for num in array:
if num > max_num:
max_num = num
return max_num
✍️ 최빈값 찾기
"hello my name is eli"
Q1. 각 알파벳마다 문자열을 돌면서 몇 글자 나왔는지 확인.
만약 그 숫자가 저장한 알파벳 빈도 수보다 크다면, 그 값을 저장하고 제일 큰 알파벳으로 저장
alphabet_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
"t", "u", "v", "x", "y", "z"]
max_occurrence = 0
max_alphabet = alphabet_array[0]
for alphabet in alphabet_array:
occurrence = 0
for char in string:
if char == alphabet:
occurrence += 1
if occurrence > max_occurrence:
max_alphabet = alphabet
max_occurrence = occurrence
return max_alphabet
result = find_max_occurred_alphabet
Q2. 각 알파벳의 빈도수를 alphabet_occurrence_list 라는 변수에 저장.
그리고 각 문자열을 돌면서 해당 문자가 알파벳인지 확인하고, 알파벳을 인덱스 화 시켜 각 알파벳의 빈도수를 업데이트
def find_max_occurred_alphabet(string):
alphabet_occurrence_array = [0] * 26
for char in string:
if not char.isalpha():
continue
arr_index = ord(char) - ord('a')
alphabet_occurrence_array[arr_index] += 1
max_occurrence = 0
max_alphabet_index = 0
for index in range(len(alphabet_occurrence_array)):
alphabet_occurrence = alphabet_occurrence_array[index]
if alphabet_occurrence > max_occurrence:
max_occurrence = alphabet_occurrence
max_alphabet_index = index
return chr(max_alphabet_index + ord('a'))
result = find_max_occurred_alphabet
👉 시간 복잡도 판단하기
- 입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계
- 입력값이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 배로 늘어나는지를 보는 것
👉 공간 복잡도 판단하기
- 입력값과 문제를 해결하는 데 걸리는 공간과의 상관관계
- 입력값이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 배로 늘어나는지를 보는 것
👉 점근 표기법
- 알고리즘의 성능을 수학적으로 효율성을 평가하는 방법
- 입력값이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 배로 늘어나는지를 보는 것
✍️ 곱하기 or 더하기
Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오. 단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서 순서대로 이루어진다.
[0, 3, 5, 6, 1, 2, 4]
def find_max_plus_or_multiply(array):
multiply_sum = 0
for number in array:
if number <= 1 or multiply_sum <= 1:
multiply_sum += number
else:
multiply_sum *= number
return multiply_sum
result = find_max_plus_or_multiply
✍️ 반복되지 않는 문자
Q. 다음과 같이 영어로 되어 있는 문자열이 있을 때, 이 문자열에서 반복되지 않는 첫번째 문자를 반환하시오.
만약 그런 문자가 없다면 _ 를 반환하시오.
"abadabac" # 반복되지 않는 문자는 d, c 가 있지만 "첫번째" 문자니까 d를 반환해주면 됩니다!
def find_not_repeating_first_character(string):
alphabet_occurrence_array = [0] * 26
for char in string:
if not char.isalpha():
continue
arr_index = ord(char) - ord("a")
alphabet_occurrence_array[arr_index] += 1
not_repeating_character_array = []
for index in range(len(alphabet_occurrence_array)):
alphabet_occurrence = alphabet_occurrence_array[index]
if alphabet_occurrence == 1:
not_repeating_character_array.append(chr(index + ord("a")))
for char in string:
if char in not_repeating_character_array:
return char
return "_"
result = find_not_repeating_first_character
🙋♂️ 소감 :
확실히 자바보다는 파이썬이 직관적이라 배우기가 좀 더 수월한 거 같다.
오늘 알고리즘 강의를 들었는데, 중요한 줄 알면서도 당시에 진도 따라가기도 벅차
나중에 프젝 다 끝나고 해야지라는 생각으로 알고리즘 문제 사이트 가입만 하고 들여다보질 못했다.
알고리즘 첫날 강의인데도 버벅대는 걸 보니, 정말 꾸준히 조금씩이라도 해야겠다는 생각을 했다.
자주 쓰는 알고리즘은 아예 외워버리기!
😈 아는 내용이라고 그냥 넘어가는건 금물! 😈
'❤️🔥TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2022-11-11(10day) (0) | 2022.11.11 |
---|---|
[TIL] 2022-11-10(9day) (1) | 2022.11.10 |
[TIL] 2022-11-08(7day) (0) | 2022.11.08 |
[TIL] 2022-11-07(6day) (0) | 2022.11.07 |
[TIL] 2022-11-04(5day) (0) | 2022.11.04 |
댓글