DATA ANALYSIS/TIL

[Day4] Python 기초(2)

yel1nk 2023. 4. 29. 03:06

함수

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