import numpy as np
def solution(numbers):
return np.mean(numbers)
del 함수 - 리스트의 특정 요소 혹은 리스트 특정 범위를 삭제
최댓값 만들기
문제설명 : numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
def solution(numbers):
m1 =max(numbers)
index=0
for i in numbers:
if i == m1:
del(numbers[index])
index += 1
m2 = max(numbers)
answer = m1*m2
return answer
# 내림차순 정렬 후 첫번째, 두번째 값을 곱해주기
def solution(numbers):
numbers.sort(reverse=True)
return numbers[0]*numbers[1]
리스트 더하기, 곱하기 연산 가능
L = [1,2,3] * 3
인덱스, 슬라이싱 사용가능
L[3]
L[2:5]
List Comprehensions 방식으로 리스트를 만들 수 있음
L = [i*i for i in range(10)]
L = [i for i in L if i%3 == 0]
in, not in 사용가능
5 in L
.append(a) : 맨 뒤에 a 추가
.extend(a) : a 리스트합치기
.insert(n,a) : n번째에 a 추가
.copy() : 리스트 복사 => 리턴받아서 사용
.remove(n) : n 하나 제거
.pop() : 마지막 제거 => 인자값이 있으면 특정 인덱스 값 삭제
.clear() : 리스트값 모두 삭제(빈 리스트)
del(L[2]) : 특정 인덱스 내용 삭제
del(L) : 리스트 자체 삭제
.count(a) : a 값의 개수 확인
len(a) : a 리스트의 길이 확인
.index() : 해당 값의 인덱스값 찾기
=> 매개변수는 iterable한 변수면 OK!
a.reverse() : 리스트 a에 들어있는 값 역순으로 바꿔줌 (리턴x)
reversed() : 기존 리스트의 역순을 갖는 배열 생성 => list(reversed(기존리스트)) => 리턴
max() : 최대값 출력
min() : 최소값 출력
list(range(2,101,2)) : 짝수만 갖는 데이터 만들기
list(range(10,0,-1) : 10부터 1까지 역순의 데이터 만들기
set(리스트)을 이용
list(set(리스트))
for문 이용
dictionary를 이용하여 중복제거
# 중복된 문자 제거한 문자열 리턴하는 문제
def solution(my_string):
return ''.join(dict.fromkeys(my_string))
map(람다식, 리스트나 튜플) => 반환 값은 map객체여서 list 혹은 tuple로 형 변환해야됨
filter(함수, 리스트나 튜플) => filter는 json을 반환
def solution(array:list, height:int)->int:
answer = len(list(filter(lambda x:x>height,array)))
return answer
키와 값 모두 출력하고 싶을때는 이렇게 써보자!
for 키, 값 in 딕셔너리.items():
반복할 코드
예시 => 옷가게 할인 받기
def solution(price):
discount_rates = {500000: 0.8, 300000: 0.9, 100000: 0.95, 0: 1}
for discount_price, discount_rate in discount_rates.items():
if price >= discount_price:
return int(price * discount_rate)
기본 구조 : 표현식 + for문
result = [표현식 for 변수 in 리스트]
표현식 + for문 + 조건문
result = [표현식 for 변수 in 리스트 조건문]
조건문 + for문
result = [조건문 for 변수 in 리스트]
중첩 for문
result = [조건문 for 변수1 in 리스트1 for 변수2 in 리스트2 ...]
중첩 List Comprehension
sorted(정렬할 데이터)
sorted(정렬할 데이터, reverse 파라미터)
sorted(정렬할 데이터, key 파라미터)
sorted(정렬할 데이터, key 파라미터, reverse 파라미터)
reverse
sorted([리스트], reverse=True)
key
예시문제
길이가 짧은것부터, 길이가 같으면 알파벳 순으로 정렬
data_list = ['but','i','wont','hesitate','no','more','no','more','it','cannot','wait','im','yours']
#중복 제거
data_list = list(set(data_list))
data_list.sort()
print(data_list)
# 길이를 기준으로 정렬
# 콜론 뒤에 있는 것을 기준으로 앞의 리스트를 정렬
data_list.sort(key=lambda x : len(x))
print(data_list)
key = lambda x: (기준1, 기준2 , ...)
방식로 사용dict1 = {'이름': '한사람', '나이': 33}
data = enumerate(dict1)
for i, key in data:
print(i, ":", key, dict1[key]
# 출력결과
# 0 : 이름 한사람
# 1 : 나이 33
파이썬 zip( ) 함수 : 길이가 같은 리스트 등의 요소를 묶어주는 함수
문자열[시작인덱스 : 종료인덱스 : 증가할 수]
슬라이싱은 초과해도 에러가 나지 않는다!
문자열 뒤집기
문자열을 하나씩, 반대로 잘라서 다시 입력시킨후 출력
'aaa'[::-1]
모음제거
String.replace(찾는 문자, 바꿀문자, 바꿀 문자 개수)
def solution(my_string):
answer = ''
remove_string = ('a,e,i,o,u')
for i in remove_string:
my_string = my_string.replace(i,'')
return my_string
'구분자'.join(리스트)
리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수
' 'join(값) : 값을 공백으로 구분하여 string으로 반환
# join 함수 사용하기
def solution(my_string):
return "".join([i for i in my_string if not(i in "aeiou")])
문자열.count(a) => 문자열에 a가 들어있는지 세는 함수
def solution(my_string):
return sum(int(i) for i in my_string if i.isdigit())
짱 쉽쥬?
arr[::], arr[1:2:3], arr[::-1] 등으로 배열의 index에 접근하는 방법을 Extended Slices라고 함
arr[A:B:C]의 의미는, index A 부터 index B 까지 C의 간격으로 배열을 만들라는 뜻
만약 A가 None 이라면, 처음부터 라는 뜻이고
B가 None 이라면, 할 수 있는 데까지 (C가 양수라면 마지막 index까지, C가 음수라면 첫 index까지가 되겠습니다.)라는 뜻입니다.
마지막으로 C가 None 이라면 한 칸 간격
문자열 대문자로 변경하는 함수 (string.upper())
문자열 소문자로 변경하는 함수 (string.lower())
문자가 대문자인지 확인하는 함수 (string.isupper())
=> true, false 반환
문자가 소문자인지 확인하는 함수 (string.islower())
=> true, false 반환
string.swapcase() : 대소문자 상호 전환.
ord('a`) # 94
chr(64) # a
string.find(찾을 문자, 시작 Index, 끝 Index)
찾는 문자가 존재 한다면 해당 위치의 index를 반환해주고
찾는 문자가 존재 하지 않는다면 -1 을 반환
string.split(구분자)
int('11', 2) # => 2진수 11을 10진수로 변환해라
# 결과3
16진수로 표현된 "1A"의 10진수 값은 다음과 같이 구할수 있다.
int('1A', 16)
# 결과 : 26
bin(number)
(2진수, 8진수, 16진수) => 접두어 빼고 나옴
b = format(value, 'b')
o = format(value, 'o')
h = format(value, 'x')
파이썬에서 문자열로 이루어진 리스트, 혹은 딕셔너리에서 특정 문자가 포함된 항목을 찾을 때 활용
str = 'final exam'
# startswith(특정 문자)
result = str.startswith('final')
str = 'final exam'
# endswith(특정 문자)
result = str.endswith('final')
List 보다 deque의 속도가 훨씬 빠름
from collections import deque
a = deque()
deque 함수
import math
x의 y제곱
x의 제곱근
입력 이터러블(iterable)에 있는 모든 요소의 곱을 계산. 곱의 기본 start 값은 1.
<<
정수를 2배로 곱하기
>>
정수를 2배로 나눠줌
print(n<<1) #10을 2배 한 값인 20 이 출력된다.
print(n>>1) #10을 반으로 나눈 값인 5 가 출력된다.
print(n<<2) #10을 4배 한 값인 40 이 출력된다.
print(n>>2) #10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.
서로 다른 n개 중 m개를 뽑는 경우의 수 공식
set의 특징
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
s3 = s1 & s2
print(s3) #result : {4,5,6}
s3 = s1 | s2
print(s3) #result : {1, 2, 3, 4, 5, 6, 7, 8, 9}
s3 = s1 - s2
print(s3) #result : {1, 2, 3}
s3 = s2 - s1
print(s3) #result : {8, 9, 7}
set1 = set([1,2,3,4,5,6])
set2 = set([3,4,5,6,8,9])
print(set1 ^ set2)
{1, 2, 8, 9}
###1) 값 1개 추가히기(add)
이미 만들어진 set 자료형에 값을 추가할 수 있다.
s1 = set([1,2,3])
s1.add(4)
print(s1) #result : {1, 2, 3, 4}
s1 = set([1,2,3])
s1.update([4,5,6])
print(s1) #result : {1, 2, 3, 4, 5, 6}
s1 = set([1,2,3])
s1.remove(2)
print(s1) #result : {1, 3}
from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
cnt = Counter(colors)
print(cnt)
>> Counter({'blue': 3, 'red': 2, 'green': 1})
>>> numbers = [1, 2, 3, 3, 4, 4, 4, 5, 5]
>>> from collections import Counter
>>> cnt = Counter(numbers)
>>> cnt.most_common()
[(4, 3), (3, 2), (5, 2), (1, 1), (2, 1)]
>>> cnt.most_common(3)
[(4, 3), (3, 2), (5, 2)]
from collections import Counter
def modefinder(numbers): #numbers는 리스트나 튜플 형태의 데이터
c = Counter(numbers)
mode = c.most_common(1)
return mode[0][0]
from collections import Counter
def modefinder(numbers):
c = Counter(numbers)
order = c.most_common()
maximum = order[0][1]
modes = []
for num in order:
if num[1] == maximum:
modes.append(num[0])
return modes
import itertools
arr = ['A', 'B', 'C]
nPr = itertools.permutaions(arr, 2)
import itertools
arr= ['A', 'B', 'C']
nCr = itertools.combinations(arr, 2)
경로 탐색
네트워크 유형
조합 유형
재귀함수
기억하며 풀기
key, value
전화번호부
다양한 자료형으로 데이터 관리 가능
모든 데이터 타입으로 접근 가능
String 기반으로 데이터 관리
현재 시점에 가장 좋은 선택을 하는 알고리즘
경주마 알고리즘
탐욕스러운 선택 조건
정렬 => 현재 최적