파이썬 내장, 외장 함수

밍수·2022년 5월 17일
0

파이썬

목록 보기
1/1

내가 보려고 만든 꼭 필요한 함수들

내장함수

all

  • 하나라도 False 가 있다면 False
all([1,2,3,0])
False
all([]), all([""])
(True, False)

any

  • 하나라도 True이면 True

chr

  • 유니코드 값을 입력받아 문자 출력
  • ord 는 역으로 유니코드 값으로 return
chr(97), chr(44032)
('a', '가')
ord("a"), ord("함")
(97, 54632)

divmod(나눠지는 값, 나누는 값)

  • 몫과 나머지 return
divmod(7, 3)
(2, 1)

eval

  • 문자열을 실행한 결과값으로 돌려주는 함수
a,b = 10,12
eval('a+b')
22

filter

  • 참인 값만 묶어서 return
a = list(filter(lambda x: x>0, [1,-3,0,2,-4,5]))
a
[1, 2, 5]

int

  • 정수로 치환, 10진법 치환
n16 = "1A" # 16진수
n2 = "111" # 2진수
int(n2,2), int(n16,16)
(7, 26)

zip

  • 동일한 개수로 이루어진 자료형을 묶어준다.
lst1 = [1,2,3]
lst2 = ["a","b","c"]
list(zip(lst1,lst2))
[(1, 'a'), (2, 'b'), (3, 'c')]
list(zip("abcd","가나다라"))
[('a', '가'), ('b', '나'), ('c', '다'), ('d', '라')]

라이브러리

날짜

  • import datetime

날짜의 차이 구하기

day_1 = datetime.date(2022,5,9)
day_2 = datetime.date(2014,12,5)
# timedelta 객체
diff = day_1-day_2
diff
datetime.timedelta(days=2712)
# 이 객체에서 필요한 데이터 들을 불러 올 수 있다.
# days, seconds, minutes, hours, weeks, 등
diff.days
2712
datetime.date.today()-diff
datetime.date(2014, 12, 5)

요일

# 0 이 월요일, 6이 일요일이다.
day_1.weekday(), day_2.weekday()
(0, 4)
# 1이 월요일, 7이 일요일이다.
day_1.isoweekday(), day_2.isoweekday()
(1, 5)

윤년확인

import calendar
calendar.isleap(2022)
False

collections.deque

  • 데크 자료형, 앞과 뒤에서 데이터를 처리할 수 있다.

회전

from collections import deque
a = [1,2,3,4,5,6]
q = deque(a)
q.rotate(2)
q
deque([5, 6, 1, 2, 3, 4])

양방향 append

q.appendleft(100)
q
deque([100, 5, 6, 1, 2, 3, 4])
q.append(100)
q
deque([100, 5, 6, 1, 2, 3, 4, 100])

양방향 pop

q.pop()
100
q.popleft()
100

collections.counter 동일한 요소 개수

from collections import Counter

# 각 요소를 딕셔너리로 개수를 출력
Counter('hello world')
Counter({'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
word = ["고민수", "고민수","이승원","이승원","이주비","이주비","이민영","이승원"]
Counter(word)
Counter({'고민수': 2, '이승원': 3, '이주비': 2, '이민영': 1})
# 가장 많은 순서로
Counter(word).most_common()
[('이승원', 3), ('고민수', 2), ('이주비', 2), ('이민영', 1)]

딕셔너리 초기값 defaultdict

from collections import defaultdict

# 초기값 int
text = "Life is too short, You need python."
d = defaultdict(int)
for i in text:
    d[i]+=1
d
defaultdict(int,
            {'L': 1,
             'i': 2,
             'f': 1,
             'e': 3,
             ' ': 6,
             's': 2,
             't': 3,
             'o': 5,
             'h': 2,
             'r': 1,
             ',': 1,
             'Y': 1,
             'u': 1,
             'n': 2,
             'd': 1,
             'p': 1,
             'y': 1,
             '.': 1})
# 초기값 list
text = "Life is too short, You need python."
d = defaultdict(list)
for i in text:
    d[i].append("뀨")
dict(d)
{'L': ['뀨'],
 'i': ['뀨', '뀨'],
 'f': ['뀨'],
 'e': ['뀨', '뀨', '뀨'],
 ' ': ['뀨', '뀨', '뀨', '뀨', '뀨', '뀨'],
 's': ['뀨', '뀨'],
 't': ['뀨', '뀨', '뀨'],
 'o': ['뀨', '뀨', '뀨', '뀨', '뀨'],
 'h': ['뀨', '뀨'],
 'r': ['뀨'],
 ',': ['뀨'],
 'Y': ['뀨'],
 'u': ['뀨'],
 'n': ['뀨', '뀨'],
 'd': ['뀨'],
 'p': ['뀨'],
 'y': ['뀨'],
 '.': ['뀨']}

우선순위 큐 headq

import numpy as np

# 데이터 생성
speed = random.sample( list(np.linspace(10,15,30)), 10)
idx = range(10)

data = list(zip(speed,idx))
data
[(10.517241379310345, 0),
 (14.310344827586206, 1),
 (13.275862068965518, 2),
 (11.379310344827587, 3),
 (12.758620689655173, 4),
 (10.0, 5),
 (14.482758620689655, 6),
 (11.206896551724139, 7),
 (11.89655172413793, 8),
 (11.724137931034482, 9)]
import heapq
# 데이터를 가장 작은 데이터 3개 출력
heapq.nsmallest(3,data)
[(10.0, 7), (10.344827586206897, 3), (11.551724137931036, 6)]
# 데이터를 가장 큰 데이터 3개 출력
heapq.nlargest(3,data)
[(15.0, 0), (14.655172413793103, 2), (13.620689655172415, 5)]

이진 탐색

import bisect
speed
[10.517241379310345,
 14.310344827586206,
 13.275862068965518,
 11.379310344827587,
 12.758620689655173,
 10.0,
 14.482758620689655,
 11.206896551724139,
 11.89655172413793,
 11.724137931034482]
# 지정한 기준점으로 분류해줌
result = []
for i in speed:
    pos = bisect.bisect_left([11,12,13,14], i)
    grade = "ABCDE"[pos]
    result.append(grade)
result
['A', 'E', 'D', 'B', 'C', 'A', 'E', 'B', 'B', 'B']
result = []
for i in speed:
    pos = bisect.bisect_left([11,12,13,14], i)
    grade = ["A등급","B등급","C등급","D등급","E등급"][pos]
    result.append(grade)
result
['A등급', 'E등급', 'D등급', 'B등급', 'C등급', 'A등급', 'E등급', 'B등급', 'B등급', 'B등급']

상수집합 생성 intEnum

from enum import IntEnum

# 집합 객체 지정
class Week(IntEnum):
    a = 1
    b = 2
    c = 3
    d = 4
    e = 5
print(Week.a.value)
print(Week.a.name)
1
a
# 반복 또한 가능하다.
for week in Week:
    print(week.name, week.value)
a 1
b 2
c 3
d 4
e 5

함수형 모듈

import itertools

무한반복자 cycle

pool = itertools.cycle([1,2,3])
for i in range(10):
    print(next(pool))
1
2
3
1
2
3
1
2
3
1

누적합 계산 accumulate

lst = [1,2,3,4,5,6,7,8,9,10]
list(itertools.accumulate(lst))
[1, 3, 6, 10, 15, 21, 28, 36, 45, 55]

누적 계산 functools.reduce

old_x 와 y 를 계산하여 new_x 를 만든다.

import functools

data = [1,2,3,4,5]
functools.reduce(lambda x,y: x+y, data)
15

((((1+2)+3)+4)+5)

다중 수준 정렬 operator.itemgetter

from operator import itemgetter

data = [
    ["가", 20, 'C'],
    ["나", 10, 'B'],
    ["다", 30, 'A'],
]
sorted(data, key=itemgetter(0))
[['가', 20, 'C'], ['나', 10, 'B'], ['다', 30, 'A']]
sorted(data, key=itemgetter(1),reverse=True)
[['다', 30, 'A'], ['가', 20, 'C'], ['나', 10, 'B']]
sorted(data, key=itemgetter(2))
[['다', 30, 'A'], ['나', 10, 'B'], ['가', 20, 'C']]

디렉토리 관리

os.listdir(path)

  • path 내 파일을 리스트로 리턴
import os
os.listdir("data")
['sheet1.xlsx', 'sheet2.xlsx']

glob

import glob

# 해당 경로의 데이터
for file in glob.glob("data/*.xlsx"):
    print(file)
data\sheet1.xlsx
data\sheet2.xlsx
# 하위 폴더를 포함한 데이터
for file in glob.glob("**/*.xlsx"):
    print(file)
data\sheet1.xlsx
data\sheet2.xlsx
data2\sheet3.xlsx

0개의 댓글