함수
def function1(x):
print('world1')
print('world2')
print('world3')
return x + x
def function2(x, y):
print('hello1')
print('hello2')
z = function1(10)
return x + y + z
a = function1(1)
b = function2(3, 4)
print(a, b)
world1
world2
world3
hello1
hello2
world1
world2
world3
2 27
재귀함수
- 대부분의 코드는 for로 대체할 수 있습니다.
- 효율도 매우 좋지 않습니다. 다만 메모라이징 기법을 사용하면 좋긴 합니다.
- 다이나믹 프로그래밍 등 필수적으로 사용되는 곳이 있기도 합니다.
def string_reverse(s):
if len(s) == 1: # 얼리리턴(코드가 매우 길면 가능하면 앞쪽에서 return 해주는 것이 효율적임)
return s
return string_reverse(s[1:]) + s[0]
string_reverse('hello world')
'dlrow olleh'
s = 'kimyelin'
result = ''
for i in s:
result = i + result
result
'nileymik'
# x의 n제곱을 구하는 함수
def 제곱(x, n):
if n == 0:
return 1
return x * 제곱(x, n-1)
제곱(5, 3)
125
# factory 함수 - 클로저
def factory(x):
def 승수(n):
return x ** n
return 승수
제곱3 = factory(3)
제곱4 = factory(4)
제곱3(2), 제곱3(3), 제곱4(2), 제곱4(3)
(9, 27, 16, 64)
list(리스트)
- 순서가 있는 데이터
- 값의 수정 가능(mutable한 객체)
메서드
copy / deepcopy
l = [[1, 2, 3], [4, 5, 6]]
ll = l.copy() # l[:]
ll[0][0] = 1000
l, ll
([[1000, 2, 3], [4, 5, 6]], [[1000, 2, 3], [4, 5, 6]])
import copy
l = [[1, 2, 3], [4, 5, 6]]
ll = copy.deepcopy(l) # ll = [i[:] for i in l]
ll[0][0] = 1000
l, ll
([[1, 2, 3], [4, 5, 6]], [[1000, 2, 3], [4, 5, 6]])
import copy
a = [1, 2, 3]
b = [4, 5, 6]
c = [a, b]
d = c
print(id(c) == id(d)) # True
print(id(c[0]) == id(d[0])) # True
d = copy.copy(c)
print(id(c) == id(d)) # False
print(id(c[0]) == id(d[0])) # True
d = copy.deepcopy(c)
print(id(c) == id(d)) # False
print(id(c[0]) == id(d[0])) # False
a = [1, 2, 3]
b = a.copy()
c = b.copy()
print(id(a) == id(b)) # False
print(id(a[0]) == id(b[0])) # True
a = [1, 2, 3]
b = copy.deepcopy(a)
c = copy.deepcopy(b)
print(id(a) == id(b)) # False
print(id(a[0]) == id(b[0])) # True
a = [[1, 2, 3], 2, 3]
b = copy.deepcopy(a)
c = copy.deepcopy(b)
print(id(a) == id(b)) # False
print(id(a[0]) == id(b[0])) # False
- deepcopy든 copy든 가리키고 있는 것이 리스트 같은 컨벤션 자료형이 아니라면 같은 주소값을 가리키게 됨
append / extend / insert
l = [10, 20, 30, 40]
l.append(50) # 뒤에 추가
l
[10, 20, 30, 40, 50]
l = [10, 20, 30, 40, 10, 10, 10]
l.append([1, 2, 3, 4, 5]) # 리스트 형태로
l
[10, 20, 30, 40, 10, 10, 10, [1, 2, 3, 4, 5]]
l = [10, 20, 30, 40, 10, 10, 10]
l.extend([1, 2, 3, 4, 5])
l
[10, 20, 30, 40, 10, 10, 10, 1, 2, 3, 4, 5]
l = [10, 20, 30, 40, 10, 10, 10]
l.insert(2, 10000) # 기존 값이 없어지지 않고 그 위치에 추가됨
l
[10, 20, 10000, 30, 40, 10, 10, 10]
remove / delete
l = [10, 20, 10000, 30, 40, 10, 10, 10]
for i in range(l.count(10)):
l.remove(10) # 해당 모든 값을 지움
print(l)
l = [10, 20, 10000, 30, 40, 10, 10, 10]
for i in range(l.count(10)):
del l[l.index(10)]
print(l)
# 실무에서 많이 사용하는 코드
# 어떤 값을 찾아내거나, 조건에 맞는 코드를 추출할 때 사용
l = [10, 20, 10000, 30, 40, 10, 10, 10]
def function(x):
return x != 10
list(filter(function, l))
# lambda
list(filter(lambda x : x != 10, l))
[20, 10000, 30, 40]
sort / reverse
l = [10, 20, 30, 10, 20, 30, 1, 2, 55, 11]
l.sort()
l.reverse() # sort와 함께 사용했으니 역정렬
l
l = [10, 20, 30, 10, 20, 30, 1, 2, 55, 11]
print(list(sorted(l, reverse = True))) # 내림차순
[55, 30, 30, 20, 20, 11, 10, 10, 2, 1]
'DATA ANALYSIS > TIL' 카테고리의 다른 글
| [Day7] Python 기초(5) (0) | 2023.05.04 |
|---|---|
| [Day6] Python 기초(4) (0) | 2023.05.03 |
| [Day5] Python 기초(3) (0) | 2023.05.02 |
| [Day3] Python 기초(1) (0) | 2023.04.28 |
| [Day2] 데이터 분석 개론/Github 기초 (0) | 2023.04.26 |