wikidocs 출처
타입오류 알려주는
pip install mypy
람다(lambda)
lambda 인자 : 표현식
>>> (lambda x,y: x + y)(10, 20)
30
3-2. key
정렬을 목적으로 하는 함수를 값으로 넣는다. lambda를 이용할 수 있다.
key 값을 기준으로 정렬되고 기본값은 오름차순이다.
>>> str_list = ['좋은하루','good_morning','굿모닝','niceday']
>>> print(sorted(str_list, key=len)) # 함수
['굿모닝', '좋은하루', 'niceday', 'good_morning']
>>> print(sorted(str_list, key=lambda x : x[1])) # 람다
['niceday', 'good_morning', '굿모닝', '좋은하루']
map()
map(함수, 리스트)
>>> list(map(lambda x: x ** 2, range(5))) # 파이썬 2 및 파이썬 3
[0, 1, 4, 9, 16]
>>> a = list(map(int, a))
>>> a [1, 2, 3, 4]
reduce()
reduce(함수, 순서형 자료)
순서형 자료(문자열, 리스트, 튜플)
>>> from functools import reduce # 파이썬 3에서는 써주셔야 해요
>>> reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
10
>>> reduce(lambda x, y: y + x, 'abcde')
'edcba'
filter()
filter(함수, 리스트)
>>> list(filter(lambda x: x < 5, range(10))) # 파이썬 2 및 파이썬 3
[0, 1, 2, 3, 4]
// 나눗셈 연산자 - 몫을 구함
divmod(a,b) = (몫, 나머지)
리스트 출력 join 문자열만가능
a = ['1','2','3']
print(' '.join(a))
1 2 3
'{인덱스0}, {인덱스1}'.format(값0, 값1)
a = 2
b = 3
s = '구구단 {0} x {1} = {2}'.format(a, b, a * b)
print(s)
출처: https://blockdmask.tistory.com/424 [개발자 지망생]
pass - 없는 클래스 그냥 넘어가게 하는거
def a
그냥 이렇게하면 오류남
def a
pass 해줘야함
list 주요함수
len(a)
a[i]
a[i:j]
element in a
a.count(element)
a.index(element)
a.append(element)
a.pop(), a.pop(0) 마지막, 첫번째 뽑기
del a[i] 인덱스
a.remove(n) 해당값
a.sort()
min(a), max(a)
a.reverse()
a.insert(i,n) i번쨰에 n을 넣는다
a[ start : end : step ]
a[::1] 기본
a[::-1] reverse
a[::2] 칸씩 띄워서 출력
ex) a=[1,2,3,4,5]
>>a[::2]
[1,3,5]
re.sub
import re
print(re.sub('\d{4}', 'XXXX', '010-1234-5678'))
decimal 4개 xxxx로 치환
s = re.sub('[^a-z0-9]', '', s)
정규 표현식축약 표현사용 예
축약표현?
[0-9] | \d | 숫자를 찾음 |
[^0-9] | \D | 숫자가 아닌 것을 찾음(텍스트, 특수 문자, white space(스페이스, 탭, 엔터 등등)를 찾을 때) |
[ \t\n\r\f\v] | \s | white space(스페이스, 탭, 엔터 등등) 문자인 것을 찾음 |
[^ \t\n\r\f\v] | \S | white space(스페이스, 탭, 엔터 등등) 문자가 아닌 것을 찾음(텍스트, 특수 문자, 숫자를 찾을 때) |
[A-Za-z0-9] | \w | 문자, 숫자를 찾음 |
[^A-Za-z0-9] | \W | 문자, 숫자가 아닌 것을 찾음 |
출처: www.fun-coding.org/DS&AL3-4.html
또다른 re관련
2. Raw string (Escape에 영향받지 않고 그대로 표시)
Escape문, 예를들어 \b(백스페이스) , \" (큰따옴표 출력) , \n(줄바꿈) 등...
raw string을 사용하면 escape문이 동작되지 않고, 있는 그대로 출력된다. 사용 방법은 출력할 문자열앞에 r을 붙여주면 된다.
문자열 나누기(split)
>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> b = "a:b:c:d"
>>> b.split(':')
['a', 'b', 'c', 'd']
a.split()에 공백이면 스페이스를 기준으로 나누고, ele를 넣어주면 해당ele에 따라 나눈다
words = [word for word in re.sub(r'[^\w]', ' ', paragraph)
.lower().split()
if word not in banned]
collections.Counter 기본 사용법
collections 모듈의 Counter 클래스는 별도 패키지 설치 없이 파이썬만 설치되어 있다면 다음과 같이 임포트해서 바로 사용할 수 있습니다.
from collections import Counter
Counter 클래스는 이와 같은 작업을 좀 더 쉽게 할 수 있도록,
데이터의 개수가 많은 순으로 정렬된 배열을 리턴하는 most_common이라는 메서드를 제공하고 있습니다.
from collections import Counter
Counter('hello world').most_common()
# [('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]
이 메서드의 인자로 숫자 K를 넘기면 그 숫자 만큼만 리턴하기 때문에, 가장 개수가 많은 K개의 데이터를 얻을 수도 있습니다.
from collections import Counter
Counter('hello world').most_common(1)
# [('l', 3)]
any() 는 or이라고 생각
all() 은 and 라고 생각하면 된다.
enumerate
- 반복문 사용 시 몇 번째 반복문인지 확인이 필요할 수 있습니다. 이때 사용합니다.
- 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환합니다.
for p in enumerate(t):
heapq
heapq.heappush(heap, item)
힙 불변성을 유지하면서, item 값을 heap으로 푸시합니다.
(순서대로 됨)
heapq.heappop(heap)
힙 불변성을 유지하면서, heap에서 가장 작은 항목을 팝하고 반환합니다. 힙이 비어 있으면, IndexError가 발생합니다. 팝 하지 않고 가장 작은 항목에 액세스하려면, heap[0]을 사용하십시오.
heapq.heappushpop(heap, item)
힙에 item을 푸시한 다음, heap에서 가장 작은 항목을 팝하고 반환합니다. 결합한 액션은 heappush()한 다음 heappop()을 별도로 호출하는 것보다 더 효율적으로 실행합니다.
heapq.heapify(x)
리스트 x를 heap으로 순서대로 나열
heapq.heapreplace(heap, item)
heap에서 가장 작은 항목을 팝하고 반환하며, 새로운 item도 푸시합니다. 힙 크기는 변경되지 않습니다. 힙이 비어 있으면, IndexError가 발생합니다.
permutation, combitnation 함수
from itertools import permutations, combinations
arr = ['A', 'B', 'C', 'D']
permute = list(permutations(arr,2))
combi = list(combinations(arr,2))
print(permute)
# [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'A'), ('B', 'C'), ('B', 'D'),
# ('C', 'A'), ('C', 'B'), ('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C')]
print(combi)
# [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
permutations 후 반드시 list 해줘야한다.
파이썬 비트연산자
연산자 | 기능 | 문법 | 설명 |
& | 비트 AND | a & b | a와 b의 비트를 AND 연산 |
| | 비트 OR | a | b | a와 b의 비트를 OR 연산 |
^ | 비트 XOR | a ^ b | a와 b의 비트를 XOR 연산(배타적 OR, Exclusive OR) |
~ | 비트 NOT | ~x | x의 비트를 뒤집음 |
<< | 비트 왼쪽 시프트 | a << b | a의 비트를 b번 왼쪽으로 이동시킴 |
>> | 비트 오른쪽 시프트 | a >> b | a의 비트를 b번 오른쪽으로 이동시킴 |
&= | 비트 AND 연산 후 할당 | a &= b | a와 b의 비트를 AND 연산한 후 결과를 a에 할당 |
|= | 비트 OR 연산 후 할당 | a |= b | a와 b의 비트를 OR 연산한 후 결과를 a에 할당 |
^= | 비트 XOR 연산 후 할당 | a ^= b | a와 b의 비트를 XOR 연산한 후 결과를 a에 할당 |
<<= | 비트 왼쪽 시프트 후 할당 | a <<= b | a의 비트를 b번 왼쪽으로 이동시킨 후 결과를 a에 할당 |
>>= | 비트 오른쪽 시프트 후 할당 | a >>= b | a의 비트를 b번 오른쪽으로 이동시킨 후 결과를 a에 할당 |
집합 연산 후 할당 연산자 사용하기
세트 자료형에 |, &, -, ^ 연산자와 할당 연산자 =을 함께 사용하면 집합 연산의 결과를 변수에 다시 저장(할당)한다.
|=은 현재 세트에 다른 세트를 더하며 update 메서드와 같다.세트1 |= 세트2세트1. update(세트2)
>>> a = {1, 2, 3, 4}
>>> a |= {5}
>>> a {1, 2, 3, 4, 5}
>>> a = {1, 2, 3, 4}
>>> a.update({5})
>>> a {1, 2, 3, 4, 5}
&=은 현재 세트와 다른 세트 중에서 겹치는 요소만 현재 세트에 저장하며 intersection_update 메서드와 같다.
>>> a = {1, 2, 3, 4}
>>> a &= {0, 1, 2, 3, 4}
>>> a {1, 2, 3, 4}
>>> a = {1, 2, 3, 4}
>>> a.intersection_update({0, 1, 2, 3, 4})
>>> a {1, 2, 3, 4}
-=은 현재 세트에서 다른 세트를 빼며 difference_update 메서드와 같다.
>>> a = {1, 2, 3, 4}
>>> a -= {3}
>>> a {1, 2, 4}
>>> a = {1, 2, 3, 4}
>>> a.difference_update({3})
>>> a {1, 2, 4}
^=은 현재 세트와 다른 세트 중에서 겹치지 않는 요소만 현재 세트에 저장하며 symmetric_difference_update 메서드와 같다.
>>> a = {1, 2, 3, 4}
>>> a ^= {3, 4, 5, 6}
>>> a {1, 2, 5, 6}
>>> a = {1, 2, 3, 4}
>>> a.symmetric_difference_update({3, 4, 5, 6})
>>> a {1, 2, 5, 6}
부분 집합과 상위집합 확인하기
세트는 부분집합, 진부분집합, 상위집합, 진상위집합과 같이 속하는 관계를 표현할 수도 있다. 이를 확인할 때 세트 자료형에 부등호와 등호 사용한다.
- <=은 현재 세트가 다른 세트의 부분집합(subset)인지 확인하며 issubset 메서드와 같다.
현재세트 <= 다른세트
현재세트.issubset(다른세트)>>> a = {1, 2, 3, 4} >>> a <= {1, 2, 3, 4} True >>> a.issubset({1, 2, 3, 4, 5}) True - <은 현재 세트가 다른 세트의 진부분집합(proper subset)인지 확인하며 메서드는 없다.>>> a = {1, 2, 3, 4} >>> a < {1, 2, 3, 4, 5} True
3.>=은 현재 세트가 다른 세트의 상위집합(superset)인지 확인하며 issuperset 메서드와 같다.
현재세트 >= 다른세트
현재세트.issuperset(다른세트)
4.>은 현재 세트가 다른 세트의 진상위집합(proper superset)인지 확인하며 메서드는 없다.
세트가 같은지 다른지 확인하기
==. != 연산자를 사용한다.
세트가 겹치지 않는지 확인하기
disjoint를 사용한다.
현재세트.isdisjoint(다른세트)
>>> a = {1, 2, 3, 4} >>> a.isdisjoint({5, 6, 7, 8}) # 겹치는 요소가 없음 True >>> a.isdisjoint({3, 4, 5, 6}) # a와 3, 4가 겹침 False
세트에 요소 추가하기
add(요소)
세트에 특정 요소 삭제하기
remove(요소), discard(요소)
discard()는 해당 요소가 없을 경우 에러 없이 그냥 넘어간다.
세트에서 임의의 요소 삭제하기
.pop()
만약 요소가 없을 경우(세트가 비었을 때) 에러를 발생시킨다.
세트의 모든 요소 삭제하기
.clear()
세트의 요소 개수 구하기
len(세트)
세트의 할당과 복사
할당하면 같은 객체를 참조한다.
.copy() 하면 완전히 복사되어 한쪽을 변경해도 나머지에 반영되지 않는다.
반복문으로 세트의 요소 모두 출력하기
for문으로 돌리면 된다. 세트의 요소는 자리가 랜덤으로 출력되기 때문에 출력할 때마다 순서가 바뀐다.
바로 세트를 만들어 for문에 사용해도 된다.
for i in {1, 2, 3, 4}: print(i)
세트 표현식(comprehension) 사용하기
{식 for 변수 in 반복가능한객체}
set(식 for 변수 in 반복가능한객체)
>>> a = {i for i in 'apple'} >>> a {'l', 'p', 'e', 'a'} #세트는 문자열 순서 랜덤
세트 표현식(comprehension)에 if문 사용하기
>>> a = {i for i in 'pineapple' if i not in 'apl'} >>> a {'e', 'i', 'n'} #조건문에 지정된 문자가 빠지고 중복값은 하나만 존재
출처: velog.io/@yeonu/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%84%B8%ED%8A%B8
list("1111")
int형은 list화가 안된다.
문자열이어야하는듯
에라토스테네스 체(소수구하는 식)
for i in range(2, int(max(a) ** 0.5) + 1):
a -= set(range(i * 2, max(a) + 1, i))
ZIP
list를 인덱스 별(index가 1인것끼리 묶어준다)
>> list(zip([1,2,3,4],[2,3,4,5]))
[(1, 2), (2, 3), (3, 4), (4, 5)]
for문과 활용
name = ['a', 'b']
value = [1, 2]
for n, v in zip(name, value):
print(n, v)
==================
a 1
b 2
STARTWITH
str.startswith(str, beg=0,end=len(string));
지정한 문자열에 해당 문자열이 첫문자로 시작하고 그 뒤로 같으면 True, 아니면 False를 반환하는 함수
str="Hello world"
str.startswith("Hello",0,11)
str.startswith("Hell",0,11)
str.startswith("H",0,11)
=>True
str.startswith("World",0,11)
str.startswith("Her",0,11)
str.startswith("e",0,11)
=>False
최대공약수
import math
math.gcd(a,b,c,)
최소공배수
import math
math.lcm(a,b,c)
딕셔너리
key 와대응 되는 value로 이뤄져 있는 자료형
형태 : {Key1:Value1, Key2:Value2, Key3:Value3, ...}
추가방법
a = {1: 'hello world'}
a = { 'a': [1,2,3]}
a['name'] = 'alice'
a[3] = [1,2,3]
사용방법a['alice'] , a[1]...
a.keys() 하면 키값만 나옴
a.values()
a.get('key값') 하면 해당 값이 나옴
'smith' in a
>>false
'alice' in a
>>true
댓글