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)
리스트 깊은 복사를 해야할 때 쓴다.
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문의 출력문들 사이에 해당 내용을 넣을 수 있게 한다.
print문의 출력을 완료한 뒤 내용을 수정할 수 있다. 예를 들면 \n 인 개행을 없앨 수 있다.
print("1-1칸","1-2칸","1-3칸",end = "")
print("2-1칸","2-2칸","2-3칸",sep = "")
>> 1-1칸 1-2칸 1-3칸2-1칸2-2칸2-3칸
print("1-1칸","1-2칸","1-3칸",end = "**end 입니다** \n")
print("2-1칸","2-2칸","2-3칸",sep = "**sep입니다**")
>> 1-1칸 1-2칸 1-3칸**end 입니다**
>> 2-1칸**sep입니다**2-2칸**sep입니다**2-3칸
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]
# 범위 내 짝수만 저장하는 리스트
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]
# 양수는 그대로, 음수는 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문
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]
# 중첩 list comprehension으로 2차원 배열 만들기
result = [ [ 0 for i in range(2) ] for j in range(3) ] # [ [0, 0], [0, 0], [0, 0] ]
인덱스(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
함수를 한 줄만으로 만들게 해주는 형식
lambda 매개변수 : 표현식
# 기존 함수 표현식
def hap(x, y):
return x + y
hap(10,20)
>> 30
# 람다를 활용한 표현식
(lambda x,y: x+y)(10,20)
>> 30
map(함수, 리스트)
list(map(lambda x: x**2, range(5)))
>> [0,1,4,9,16]
reduce(함수, 시퀀스)
from functools import reduce
reduce(lambda x,y: x+y, [0,1,2,3,4])
>> 10
filter(함수, 리스트)
list(filter(lambda x: x < 5, range(10)))
>> [0,1,2,3,4]
받은 자료형의 최대,최소값을 반환
# =========================================================
# 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]
#예 :
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() 같은 경우에는 내장함수이기 때문에 기존의 리스트를 변경하는 것이 아니라 정렬된 새로운 리스트를 반환한다.
myList = [4, 2, 3, 5, 1]
myList.sort()
myList
>> [1, 2, 3, 4, 5]
## 기본 형식
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)]
문자열로 된 수식을 계산하는데 유용하다.
# 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