str1.find(str2)
: index 리턴str2 in str1
: 존재여부 리턴
- replace()
str.replace(',', '')
str.replace(',', '', 1)
: 처음에 발견되는 1개만 제거str.replace('World,', '')
: World 문자열 제거- list에 사용 불가. 문자열에만 사용 가능
- sub()
re.sub(",", "", str)
re.sub(",|He|Py", "", str)
: , HE Py 모두 제거
- 반복문
for char in str: if char in "HWP": result = result.replace(char, '')
- strip
str.strip()
: 공백 제거str.strip('a')
: 문자 제거
str[::-1]
str.upper()
,str.isupper()
str.lower()
,str.islower()
-
list(str(num))
: 숫자 → 리스트 -
array.count(str(0))
: 리스트에서 특정 값 갯수 -
array.append()
VSarray.extend()
array = [1, 2, 3] ; array.append([4, 5])
→ [1, 2, 3, [4, 5]]array = [1, 2, 3]; array.extend([4, 5])
→ [1, 2, 3, 4, 5]
-
배열 초기화
[[] for _ in range(3)]
→ [[], [], []][]*3
→ [][[0]] * 3
→ [[0], [0], [0]][0] * 3
→ [0, 0, 0]
-
print(*s)
- 리스트 앞에
*
를 붙이면 안에 있는 숫자들을 1 2 3 4 이런 식으로 출력할 수 있음
- 리스트 앞에
-
빈 배열에서 마지막 인덱스를 조회하는 경우
- 문제점:
arr[-1]
을 하는 경우 에러가 발생함 - 해결:
arr[-1:]
을 한다면[]
을 반환함 - 유의사항:
arr[-1:] != [num]
처럼 사용해야 함
- 문제점:
-
뒤집기
list.reverse()
reversed(list)
a = "*" ; print(a[0][0])
→ "*"
- 입력
land = [list(map(int, input().split())) for _ in range(n)]
max(map(max, list))
(⭕)map()
: iterable을 받아서 각 요소에 함수를 적용해주는 함수
max(max(list))
(❌)- 각 리스트의 첫번째 원소부터 순차적으로 비교하여 1차원 리스트를 반환하고, 그 1차원 리스트의 최대값을 반환함
- 실제 list의 최대값과 다를 수 있음
max(list)
(❌)- 각 리스트의 첫번째 원소부터 순차적으로 비교하여 1차원 리스트를 반환
파이썬의 얕은 복사
- 네번째 줄 값으로 [[0, 1, 0], [0, 0, 0], [0, 0, 0]] 가 나와야 하는 게 아닌가?
board = [[0, 0, 0]] * 3
print(board) # result : [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
board[0][1] = 1
print(board) # result : [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
-
원인 : 파이썬의 얕은 복사
- 파이썬이 * 연산자로 초기화를 할 때 값을 각각 할당하는 게 아니라, 하나의 객체를 생성해 놓고 모두가 이를 가리키는 '얕은 복사'를 진행함
-
해결책 : for문 사용하기
board = [[0] * 3 for _ in range(3)]
print(board) # result : [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
board[0][1] = 1
print(board) # result : [[0, 1, 0], [0, 0, 0], [0, 0, 0]]
from itertools import {permutations}
permutations(nums)
→ nP2combinations(nums ,2)
→ nC2combinations_with_replacement(nums, 2)
-> nH2
- tuple 형태이므로 유의할 것!
- 길이 :
len(list(permutations(nums))
- 길이 :
import math
math.gcd(n, m)
→ 최대공약수(n*m)//math.gcd(n,m)
→ 최대공배수
- 리스트나 문자열에서 각 원소가 몇 번씩 나오는지
from collections import Counter
-dic = Counter(arr)
float('inf')
,float('-inf')
-
반올림
- 소수점 4째 자리까지 표현
round(value, 4)
print("%.4f" %(value))
-
절댓값 :
abs()
-
import math
- 올림 :
math.ceil()
- 내림 :
math.floor()
- 올림 :
- 2진수 변환 함수
b_num = format(n, 'b')
return b_num
- 2진수 변환 함수 사용 X
- n을 2로 나눈 나머지를 계속 기록
- 재귀 함수
def get_binary(n, li):
a, b = divmod(n, 2) # 몫과 나머지 반환
li.append(b)
if a == 0 :
return li
else :
return get_binary(a, li)
answer = get_binary(n, [])
answer.sort(reverse = True)
return "".join([str(_) for _ in answer])
- 내장함수 아예 사용 X
def getBinaryNum(n, li):
a, b = n//2, n % 2
li.append(b)
if a == 0 :
return li
else :
return getBinaryNum(a, li)
answer = get_binary(n, [])
answer.sort(reverse = True)
return "".join([str(_) for _ in answer])
sorted(a)
- 파이썬 내장 함수
- 리스트, 튜플, 문자열 등 가능
- 내림차순 정렬 :
a = sorted(a, reverse=True)
- 활용 :
''.join(sorted("35214"))
→ 12345 - 새로운 정렬 결과 반환, 원래 목록 영향 X
a.sort()
- 파이썬 리스트는
sort()
메소드를 가지고 있음 - 내림차순 정렬 :
a.sort(reverse=True)
- none을 반환함, 원래 목록에 영향 O
- 파이썬 리스트는
a = sorted(a, key=lambda x : x[1])
: 열 기준a = sorted(a, key=lambda x : -x[0])
: 행 기준, 내림 차순a.sort(key=lambda x : (x[1], x[0]))
: 행 기준으로 하되 값이 같으면 열 기준
reversed(a)
: 문자를 역순으로 접근- 단점 : 반복자 타입을 반환함
print(reversed(a))
하면 <reversed object at 0x1050ca1d0> 가 출력됨
print("".join(reversed(s))
a.reverse()
: 리스트를 거꾸로 뒤집음
a.sort(key = len)
-
list -> set -> list
- 단점 : 순서 뒤죽박죽
list(set(a))
-
for문
nums = [10, 22, 19, 22, 1, 10, 5] result = [] for n in nums: if n not in result: result.append(n) print(result)
-
list comprehension
nums = [10, 22, 19, 22, 1, 10, 5] result = [] [result.append(n) for n in nums if n not in result] print(result)
dic = {}
- 딕셔너리를 대상으로 for문을 실행하면 key 값들만 출력함
dic.items()
를 해야 key, value 값 탐색 가능
dic = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
for d in dic :
print(d) # key 값들만 출력
for k, v in dic.items() :
print(k, v) # key, value 접근 가능
s_nums = sorted(dic.values(), key=lambda x: x[1], reverse=True)
dic = {}
for i in range(n):
dic[i] = [nums[i], b_nums[i]]
s_nums = dict(sorted(dic.items(), key=lambda item: (item[1][1], item[1][0]), reverse=True))
dic={}
처럼 공딕셔너리 상태에서 반복문 구현은 불가능
dic = {
a : {aa: 1, bb: 2},
b : {aa: 1, bb: 2}
}
- dic['a']['aa'] = 1
- dic['a'] = {aa: 1, bb: 2}
from collections import Counter
numbers = [1, 2, 3, 3, 4, 4, 4, 5, 5]
cnt = Counter(numbers) ## Counter({4: 3, 3: 2, 5: 2, 1: 1, 2: 1})
cnt.most_common() ## [(4, 3), (3, 2), (5, 2), (1, 1), (2, 1)]
mode = cnt.most_common()[0][0] # 최빈값
- 재귀 최대 깊이 설정
import sys
sys.setrecursionlimit(100000)
- 재귀에서 None을 반환하는 경우
# None 반환하는 경우
def dfs():
if 종료 조건:
return cnt
dfs()
# 다음과 같이 해야한다
def dfs():
if 종료 조건:
return cnt
return dfs()
- 에라토스테네스의 체 (참고)
def prime_list(n):
# 에라토스테네스의 체 초기화: n개 요소에 True 설정(소수로 간주)
sieve = [True] * n
# n의 최대 약수가 sqrt(n) 이하이므로 i=sqrt(n)까지 검사
m = int(n ** 0.5)
for i in range(2, m + 1):
if sieve[i] == True: # i가 소수인 경우
for j in range(i+i, n, i): # i이후 i의 배수들을 False 판정
sieve[j] = False
# 소수 목록 산출
return [i for i in range(2, n) if sieve[i] == True]
ord('A')
: 65,ord('a')
: 97chr(65)
: 'A',chr(97)
: 'a'
- 숫자:
str.isdigit()
- 숫자+문자:
str.isalnum()
- 코드 종료
- 값을 찾을 수 없을 때 -1을 출력하야 하는 경우 유용함
find_answer = True
와 같은 변수를 만들지 않아도 됨
- 만약 for문 중간에서 break가 실행되면 else 부분을 실행하지 않음
- break에 걸리지 않고 for문이 끝까지 도는 경우 else 부분을 실행함
for i in range(N):
if 조건문:
break
else:
코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
numbers = list(map(int, input().split()))
n = list(input().strip())
(각각의 수들이 붙어서 입력으로 주어진 경우)strip()
: 공백 제거rstrip()
: 오른쪽 공백 제거
print(*answer, sep='\n')