유용한 Python 문법 정리

Dan·2023년 4월 9일
0
post-thumbnail

Library

itertools

permutations

from itertools import permutations

# permutations 함수를 사용해서 아래와 같이 대입해주면 data의 값들중 3개씩 뽑아와 튜플형태로 만들어준다
# ex) (5,6,7) (5,6,8)
per = permutations(data, 3)
ans = 0

for i in per:
    if m >= sum(i):
        ans = max(ans, sum(i))
print(ans)

copy

deepcopy

리스트 깊은 복사를 해야할 때 쓴다.

import copy

a = [[1,2],[3,4]]
b = copy.deepcopy(a)
a[1].append(5)
>> a: [[1, 2], [3, 4, 5]]
>> b: [[1, 2], [3, 4]]

print()

sep = ""

print문의 출력문들 사이에 해당 내용을 넣을 수 있게 한다.

end = ""

print문의 출력을 완료한 뒤 내용을 수정할 수 있다. 예를 들면 \n 인 개행을 없앨 수 있다.

print("1-1칸","1-2칸","1-3칸",end = "")
print("2-1칸","2-2칸","2-3칸",sep = "")

>> 1-11-21-32-12-22-3print("1-1칸","1-2칸","1-3칸",end = "**end 입니다** \n")
print("2-1칸","2-2칸","2-3칸",sep = "**sep입니다**")

>> 1-11-21-3**end 입니다**
>> 2-1**sep입니다**2-2**sep입니다**2-3

Loop

List Comprehension

기본 구조

n = 5

# n개의 0으로 초기화된 리스트
result = [ 0 for i in range(n) ]   # [0, 0, 0, 0, 0]

# 0 ~ n으로 초기화된 리스트
result = [ i for i in range(n) ]   # [0, 1, 2, 3, 4]

표현식 + for문 + 조건문

# 범위 내 짝수만 저장하는 리스트
result = [ n for n in range(10) if n%2 == 0 ]   # [0, 2, 4, 6, 8]

# 범위 내 홀수만 저장하는 리스트
result = [ n for n in range(10) if n%2 != 0 ]   # [1, 3, 5, 7, 9]

# 배열에서 양수만 저장하는 리스트
array = [ -1, 0, -4, 24, 5, -10, 2 ]
result = [ n for n in array if n > 0 ]          # [24, 5, 2]

표현식 + 조건문 + fo문

# 양수는 그대로, 음수는 0으로 저장하는 리스트
array = [ -1, 0, -4, 24, 5, -10, 2 ]
result = [ n if n>0 else 0 for n in array ]    # [0, 0, 0, 24, 5, 0, 2]

# 짝수라면 'even', 홀수라면 'odd'를 저장하는 리스트
array = [0, 1, 2, 3]
result = [ 'even' if n%2== 0 else 'odd' for n in array ] 
# ['even', 'odd', 'even', 'odd']

중첩 for 문

# 중첩 for문
pos = []
for i in range(1, 4) :
    for j in range(1, 3) :
        pos.append(i*j)

pos = [ i*i for i in range(1, 4) for j in range(1, 3) ]  # [1, 2, 2, 4, 3, 6]

2차원 배열

# 중첩 list comprehension으로 2차원 배열 만들기
result = [ [ 0 for i in range(2) ] for j in range(3) ]   # [ [0, 0], [0, 0], [0, 0] ]

enumerate()

인덱스(index)와 원소를 동시에 접근하면서 루프를 돌릴 수 있는 방법

기본구조

# 원소 그자체
for entry in enumerate(['A', 'B', 'C']):
...     print(entry)
...
(0, 'A')
(1, 'B')
(2, 'C')

# 인덱스 분할
for i, letter in enumerate(['A', 'B', 'C'], start=1):
...     print(i, letter)
...
1 A
2 B
3 C

시작 인덱스 변경

# start로 변경 가능
for i, letter in enumerate(['A', 'B', 'C'], start=1):
...     print(i, letter)
...
1 A
2 B
3 C

Function

Lambda

함수를 한 줄만으로 만들게 해주는 형식

lambda 매개변수 : 표현식

# 기존 함수 표현식
def hap(x, y):
	return x + y
hap(10,20)
>> 30
    
# 람다를 활용한 표현식
(lambda x,y: x+y)(10,20)
>> 30

map()

map(함수, 리스트)

list(map(lambda x: x**2, range(5)))
>> [0,1,4,9,16]

reduce()

reduce(함수, 시퀀스)

from functools import reduce

reduce(lambda x,y: x+y, [0,1,2,3,4])
>> 10

filter()

filter(함수, 리스트)

list(filter(lambda x: x < 5, range(10)))
>> [0,1,2,3,4]

max(), min()

받은 자료형의 최대,최소값을 반환

기본 형식

# =========================================================
# max(arg1, arg2) 함수 예제1 : 리스트
a = [1, 2, 3]
b = [4, 5, 6]
print(max(a, b))  # 반환 : [4,5,6]

# =========================================================
# max(arg1, arg2) 함수 예제2 : 문자열
c = 'BlockDMask'
d = 'Blog'
print(max(c, d))  # 반환 : 'Blog'

# =========================================================
# max(arg1, arg2, ...) 함수 예제4 : 인자가 M 개
e1 = [2, 3, 4]
e2 = [2, 2, 2, 2, 2]
e3 = [9, 8, 7, 6, 5]
e4 = [1]
e5 = [0]
print(max(e1, e2, e3, e4, e5))  # 반환 : [9, 8, 7, 6, 5]

max,min의 key 활용

#예 :
arr = [(0,10),(1,14),(2,2),(3,24)]
str = max(arr,key = lambda x:x[1]) 
'''
arr리스트의 각 원소가 순서대로 lambda함수의 입력x로 들어가고 x[0]은 각 원소tuple의 
첫번째값을 의미하는것이고 x[1]은 각원소tuple의 2번째값을 의미한다.
예: 위 arr리스트에서 첫번째값인 (0,10)원소에서 x[0]=0 ,x[1]=10이 된다.
결국, 이 예제에서는 'x[1]이 제일 큰 원소를 찾겠다' 라는 의미이고, str에서는 
24가 제일 크므로 (3,24)의 원소가 담긴다.
'''
print(str)

#print결과값=> (3,24)

sort(), sorted()

sort() 는 리스트 메소드이고 리스트 자체를 변경시킨다.
sorted() 같은 경우에는 내장함수이기 때문에 기존의 리스트를 변경하는 것이 아니라 정렬된 새로운 리스트를 반환한다.

sort()

myList = [4, 2, 3, 5, 1]
myList.sort()
myList
>> [1, 2, 3, 4, 5]

sorted()

## 기본 형식
sorted([4, 2, 3, 5, 1])
>> [1, 2, 3, 4, 5]

## 어떤 이터러블 객체도 받을 수 있기에 다음과 같은 딕셔너리 객체도 가능
sorted({3: 'D', 2: 'B', 5: 'B', 4: 'E', 1: 'A'})
>> [1, 2, 3, 4, 5]

## key 매개변수
students = [
        ('홍길동', 3.9, 2016303),
        ('김철수', 3.0, 2016302),
        ('최자영', 4.3, 2016301),
]
sorted(students, key=lambda student: student[2])
>> [('최자영', 4.3, 2016301), ('김철수', 3.0, 2016302), ('홍길동', 3.9, 2016303)]

## 내림차순
sorted(students, key=lambda student: student[2], reverse=True)
[('홍길동', 3.9, 2016303), ('김철수', 3.0, 2016302), ('최자영', 4.3, 2016301)]

eval()

문자열로 된 수식을 계산하는데 유용하다.

# 1. 문자열 덧셈
a = eval('"Daniel" + "Kim"')
print(f"{a}")

>> DanielKim
 
# 2. 숫자 덧셈
b = eval("100 + 32")
print(f'{b}')

>> 132
 
# 3. 내장 함수 abs
c = eval("abs(-56)")
print(f'{c}')

>> 56
 
# 4. 리스트 길이
d = eval("len([1,2,3,4])")
print(f'{d}')

>> 4
 
# 5. round 함수
e = eval("round(1.5)")
print(f'{e}')

>> 2
profile
만들고 싶은게 많은 개발자

0개의 댓글