본문 바로가기
파이썬

[파이썬 강좌] 파이썬 유용한 함수 모음 TOP 10

by GDBS 2021. 7. 7.
728x170

 

1. len( )

길이(크기)를 구하는 함수, 자료형을 가리지 않는다.

pandas등 외부 모듈에도 쓸 수 있는 함수이다.

파이썬에서 자료형의 index는 0부터 시작하지만, len()의 결과값은 1부터 시작한다.

 

my_list = [1, 2, 3] # 값이 3개인 list

len(my_list)
# 3 ==> list(배열)의 값의 개수가 return 된다.

my_str = 'Python 12345'

len(my_str)
# 12 ==> str의 길이가 return 된다.

my_dict = {'a' : 1, 'b' : 2, 'c' : 3}

len(my_dict)
# 3 ==> key와 value가 한 쌍이기 때문에 3개로 return된다.

my_int = 12345

len(my_int)
# TypeError: object of type 'int' has no len() ==> int, float형은 길이 없기때문에 return값이 없다.

 

 

2. dir( )

dir()은 기본적으로 현재 메모리에 할당되어 있는 변수들을 볼 수 있는 함수이다.

 

함수에 대한 명령어의 목록을 얻을 수 있는 함수이다.

mothod를 사용할 때 . 찍고 Tab key를 누르면 목록이 다 나오기도 하지만,

전체적으로 어떤 기능들이 있는지 살펴볼때 유용하다.

 

( ) 안에 아무것도 넣지 않으면 메모리에 있는 목록이 출력되고,

Class나 함수의 이름을 그대로 넣으면 그 함수가 기능들을 훑어볼 수 있다.

 

dir()

['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__',
 '__package__', '__spec__', 'my_dict', 'my_int', 'my_list', 'my_str']
 
==> 앞에서 만든 변수들이 메모리에 남아있기 때문에 함께 return된다.

dir(list)

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', 
 '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
 '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
 '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__',
 '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
 '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__',
 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop',
 'remove', 'reverse', 'sort']
 
==> append 부터 sort 까지가 list에서 사용할 수 있는 method 목록이다.

 

3. del

삭제하는 명령어, del 뒤에 아무거나 넣어보면 다 삭제된다.

메모리에 있는 변수, 함수를 삭제할 수 있고 사전형(dict)이나 리스트(list)의 값들을 삭제할 수 있다.

외부 모듈을 쓸때에도 웬만한 값들은 삭제 가능하다.

 

 

del my_dict['a']

print(my_dict)
# {'b': 2, 'c': 3} ==> 'a'를 key로 갖는 첫번째 데이터가 지워졌다.

my_tuple = (1, 2, 3)

del my_tuple[0]
# TypeError: 'tuple' object doesn't support item deletion

dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__',
 '__package__', '__spec__', 'add', 'my_dict', 'my_int', 'my_list',
 'my_str', 'my_tuple']
 
del my_tuple # tuple을 메모리에서 삭제
del add # add 함수를 메모리에서 삭제

dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__',
 '__package__', '__spec__', 'my_dict', 'my_int', 'my_list', 'my_str']
 

 

4. sum( )

sum( )

sum( )은 당연히 합을 구해주는 함수다.

 

sum( )의 인자로는 iterable이 들어가야 한다. 리스트(list), 튜플(tuple) 등이 되겠다.

즉, sum(1, 2) 이런식으로는 동작하지 않는다.

 

sum(object)의 형태가 되어야 하고, 숫자(int, float)로만 구성되어 있어야 한다.

start = 0 부분은 offset의 개념이다. 즉, iterable이 비어있을 때(empty)를 위한 기본값이다.

 

sum([1, 2, 3])	 
# 6

sum([1, 2, 3], 5)
# 11

sum([], 5)
# 5 ==> 빈 iterable을 넣는다면 start 값이 return 된다.

sum(['a', 'b', 'c'])
# TypeError: unsupported operand type(s) for +: 'int' and 'str'

sum(['a', 'b', 'c'], '')
# TypeError: sum() can't sum strings [use ''.join(seq) instead]

 

 

5. abs( )

 

abs는 absolute의 줄임말로 절대값을 표현해준다.

 

설명도 간단하다. 

이런 저런 숫자를 넣어보면 수학시간에 배웠던 절대값들이 나온다.

 

abs( -1 )
# 1 ==> - 를 떼고 양수표현

abs( -3.1e-12 )
# 3.1e-12 

abs(1 + 2j)
# 2.23606797749979 ==> 복소수 극좌표계의 크기..

 

6. min( ) / max( )

최소값과 최대값을 구해주는 함수다.

두 함수의 사용법은 동일하다.

 

여러개의 인자를 넣을 수 있고, 숫자만 넣으라는 말은 없다. 

또한 min, max 값을 찾기 위한 key를 옵션으로 넣을 수 있다.

 

min([1, 2, 3])
# 1

min(['a', 'b', 'c'])
# 'a' ==> 문자열도 정렬해서 min 값을 찾아준다.

max([-1, 2, 3, -5], key = abs)
# -5 ==> key를 abs로 넣어 절대값이 가장 큰 경우를 찾았다.

 

7. round( )

 

round( )는 반올림이다. 사용법을 알아보자.

 

number 를 ndigits 의 자리수만큼 표현되도록 반올림 해준다.

ndigits 소수점의 자리를 표현하므로, -1 값을 넣어주면 10의 자리에서 반올림 해준다.

(엑셀의 round 함수랑 사용법이 완전히 같다.)

 

round(1.2278, ndigits = 2)
# 1.23 ==> 소수점 세 번째 자리에서 반올림하여 2자리까지 표현한다.

round(1.2222, 2) # 'ndigits =' 는 생략가능하다. 
# 1.22

round(123, -1) # 10의 자리에서 반올림
# 120 

 

8. pow( )

power 함수, 

 

** 연산자와 동일하다. 그리고 나머지를 구해주는 기능이 하나 더 있다.

** 와 동일하지만 가독성이 더 좋아지기 때문에 사용할만하다.

변수 3개를 넣으면 x ** y % z 동작을 한다.

 

(127/255) ** 2.2 #
# 0.215764399609395 

pow((127/255), 2.2) # 변수가 복잡해질수록 pow()함수가 가독성이 좋다.
# 0.215764399609395

2 ** 5 % 19
# 13

pow(2, 5, 19)
# 13 ==> 나머지를 구해주는 기능도 있다.

 

9. divmod( )

몫과 나머지를 한 번에 구해서 return 해주는 함수.

즉, 몫(//) 와 나머지(%) 연산자를 합친 기능이다.

 

설명도 별 다를게 없다.

몇 가지 연산을 해보자.

 

divmod(7, 3)
# (2, 1) ==> 설명대로 tuple로 return 한다.

divmod(5, 1.2) 
# (4.0, 0.20000000000000018) ==> float 연산.. 0.2가 나와야 하지만 자리수에 오차가 생긴다. 

divmod(pow(2, 5), 19)
# (1, 13)

 

10. eval( )

eval( ) 함수는 문자열(str)로 된 연산을 수행해주는 함수이다.

가끔 데이터가 문자열형태로 되어 있어 숫자로 쓰려고 하면 에러나는 경우가 있는데, 그 때 쓰면 좋은 함수이다.

 

eval('1 + 2')
# 3

eval('1.2 + 2.4')
# 3.5999999999999996 ==> 알아서 float으로 return한다. 자리수 한계에 의한 오차가 있음. 

round(eval('1.2 + 2.4'),1)
# 3.6 ==> round 함수를 써주는게 좋다.

eval('a + b')
# NameError: name 'a' is not defined ==> 문자열 연산은 하지않는다.

a = 1; b = 2
eval('a + b')
# 3

a = [1, 2, 3]; b = [4, 5, 6]
eval('a + b')
# [1, 2, 3, 4, 5, 6] ==> 미리 선언된 변수의 연산을 한다. 

a = 'a' ; b = 'b'
eval('a + b')
# 'ab'

 

11. enumerate( )

파이썬 for in loop의 특징은 iterator나 generator에서 값들을 하나씩 받아온다는 점이다.

값만 필요한 경우에는 아무 문제가 없지만, 때로 순서(index)가 필요한 경우가 있다.

enumerate 함수는 index와 값이 모두 필요할 때 사용하며, 사전적 의미는 아래와 같다. 

 

enumerate 함수는 iterable 변수와 start index를 지정하는 방식으로 사용한다.

먼저 리스트(list) [ 1, 2, 3 ] 에서 for in loop를 이용해 값을 하나씩 가져와 보면

 

my_list = [ 1, 2, 3 ]

for x in my_list:
    print('값 : {}'.format(x))

값 : 1
값 : 2
값 : 3

 

이 값들의 순서를 표시하고 싶으면 어떻게 해야할까

len( )과 range( ) 함수를 이용해서도 표시할 수 있다.

리스트(list)의 길이(len)로 range 함수를 이용, index를 가져올 수 있다.

 

for i in range(len(my_list)):
    print('{} 번째 값 : {}'.format(i+1, my_list[i]))

1 번째 값 : 1
2 번째 값 : 2
3 번째 값 : 3

 

enumerate 함수는 다음과 같이 쓸 수 있다.

i, x 와 같이 index와 값을 한번에 받아온다. 

 

for i, x in enumerate(my_list):
	print('{} 번째 값 : {}'.format(i+1, x))    

1 번째 값 : 1
2 번째 값 : 2
3 번째 값 : 3

 

또한, 시작 index를 변경할 수 있다. 

enumerate(my_list, 2) 와 같이 사용하면 첫 index를 0이 아닌 2 부터 시작한다.

 

for i, x in enumerate(my_list, 2):
	print('{} 번째 값 : {}'.format(i, x))
	
2 번째 값 : 1
3 번째 값 : 2
4 번째 값 : 3

 

12. sorted( )

함수 이름 그대로 정렬하는 기능이며

리스트(list)에 있는 sort method와 사용방식이 거의 비슷하다.

 

iterable 변수는 모두 사용할 수 있으며, 

key와 reverse 를 옵션으로 지정할 수 있다.

 

결과 값은 리스트(list)로 return하며, 기본설정은 오름차순(ascending)이다.

sorted 함수에 튜플(tuple)을 넣어보면 오름차순 정렬하여 리스트(list)로 return한다.

sorted((1,5,3,-5))
=> [-5, 1, 3, 5]

 

reverse = True 를 넣어주면, 내림차순 정렬한다.

 

sorted((1,5,3,-5), reverse = True)
=> [5, 3, 1, -5]

 

key에는 함수의 이름을 넣어주면 되는데 대표적으로 사용하는 함수는 abs이다.

입력 변수가 하나인 함수의 이름을 그대로 넣어주면 된다.

key = abs를 넣어주면, 절대값을 기준으로 정렬하여준다.

sorted((1,5,3,-5), key = abs)
=> [1, 3, 5, -5]

 

필요한 key가 있다면, lambda를 이용해 간단한 함수를 만들어줘도 된다.

key = lambda x : 1/x 와 같이 써주면

값들의 역수를 취해 정렬해준다.

 

-1/5, 1/5, 1/3, 1/1 순으로 정렬되지만 원래 값을 바꾸지는 않는다.

sorted((1,5,3,-5), key = lambda x : 1/x)	      
=> [-5, 5, 3, 1]

 

13. reversed( )

값의 순서를 거꾸로 해주는 함수. 

reversed( sequence ) 와 같이 사용하며,

reverse iterator를 return한다고 되어있다.

reversed( (1, 2, 3) ) 튜플(tuple)을 넣어보니 reversed object 를 return 한다.

 

reversed object는 iterator이며, 변수로 사용하고자 한다면 리스트(list)나 튜플(tuple)로 전환해주어야 하고

for in loop 에서 그대로 사용할 수 있다.

 

tuple(reversed( ( 1, 2, 3 ) ))	      
=> (3, 2, 1)

list(reversed( ( 1, 2, 3 ) ))	      
=> [3, 2, 1]

for x in reversed( ( 1, 2, 3 ) ):
	      print(x)
	      
3
2
1

 

14. zip( )

마지막으로 zip 함수를 알아보자.

여러개의 iterator에서 값들을 한번에 받아올 수 있는 기능을 가지고 있다.

 

다음과 같이 사용한다.

zip(iter1, iter2, .... )

 

길이가 3인 2개의 리스트(list)에서 index 순서대로 값들을 가져와

값들을 하나의 튜플(tuple)로 return함을 알 수 있다.

 

for x in zip([1, 2, 3], [4, 5, 6]):
	      print(x)
	      
(1, 4)
(2, 5)
(3, 6)

 

두 iterator의 길이가 다를 때에는 짧은 길이에 맞춰 동작한다.

첫 번째 list의 세 번째값인 3은 버려짐을 알 수 있다.

 

for x in zip([1, 2, 3], [4, 5]):
	      print(x)
	      
(1, 4)
(2, 5)

 

zip 함수가 가장 유용하게 사용될 때는 2차원 배열을 전치(transpose)할 때 이다.

 

[ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] 라는 리스트(list)가 있다면, 2차원 배열(표)로 볼 수 있다.

이 표를 다음과 같이 행 ↔ 열을 바꾸는 전치를 하고자 할 때 zip 함수가 유용하게 사용된다.

 

 

my_list = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] 로 만들고, 전치(transopose)하여 my_list_transpose에 넣어보자

 

my_list = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
my_list_transpose = [ ]

 

for in loop에 zip 함수와 append methode를 사용한다. 

여기서 * (asterisk) 는 unpack을 작업을 수행한다. 

 

for x in zip(*my_list):
    my_list_transpose.append(x)
    
print(my_list_transpose)
=> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

 

이 코드는 list comprehension을 이용하여 간소화 할 수 있다.

 

my_list_transpose = [x for x in zip(*my_list)]

 

 

[관련글]

728x90
반응형
그리드형

댓글