제곱함수의 잘못된 구현
def my_power(list_a):
for i in list_a:
list_a[i]=i*i
list_a=[1,2,3]
print(my_power(list_a))
- 윗 코드의 문제점
- for 문의 i는 value를 가지고 오는것을 이해하지 못한 코드
- list_a는 리스트 자료형. 즉, 가변자료형(mutable)이다. 자기꺼를 누가 바꿔도 조용히 있으므로 … 딥러닝할 때 이렇게 바꿔버리면 원본 오염이 발생한다.
제곱함수의 구현
- 제곱함수의 구현 1 – enumerate 사용
def my_power(list_a):
for i, value in enumerate(list_a):
list_a[i]=value*value
return list_a
list_a=[1,2,3]
print(my_power(list_a))
- 제곱함수의 구현2 – 인덱스 값으로 리스트를 제한
def my_power(list_a):
for i in range(len(list_a)):
list_a[i]=list_a[i]*list_a[i]
return list_a
list_a=[1,2,3]
print(my_power())
- 제곱함수의 구현3 – 리스트 컴프리핸션
#리스트컴프리핸션으로 구해보자
def my_power(list_a):
return([i*i for i in list_a])
list_a=[1,2,3]
print(my_power(list_a))
구현 3이 가장 파이썬스럽다고 한다. 코드가 읽기 쉽고, 구현1과 구현2가 원본을 오염시키는데 반하여 구현3은 원본을 오염시키지 않기 때문이다.
참조. 오염 방지를 위한 “구현1″의 변경
def my_power(list_a):
list_b=[]
for i, value in enumerate(list_a):
list_b[i]=value*value
return list_b
list_a=[1,2,3]
print(my_power(list_a))
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
Cell In[15], line 8
5 return list_b
6 list_a=[1,2,3]
----> 8 print(my_power(list_a))
Cell In[15], line 4, in my_power(list_a)
2 list_b=[]
3 for i, value in enumerate(list_a):
----> 4 list_b[i]=value*value
5 return list_b
IndexError: list assignment index out of range
이유는, list_b[]에 넣으려고 하는데 인덱스 값(메모리 영역)이 잡혀 있지 않아서다. 다음과 같이 append로 값을 넣어주어야 한다.
def my_power(list_a):
list_b=[]
for i, value in enumerate(list_a):
list_b.append(value*value)
return list_b
list_a=[1,2,3]
print(my_power(list_a))
print(list_a)