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)]
[관련글]
'파이썬' 카테고리의 다른 글
[파이썬강좌] Python에서 트위터(Twitter) API를 사용하는 방법 (feat.트위터 개발자 등록) (0) | 2021.11.17 |
---|---|
[파이썬] 프로그래머에게 필요한 파이썬 관련 필수 링크모음!! (0) | 2021.10.21 |
[파이썬 강좌] 14. Main 함수 (0) | 2020.08.31 |
[파이썬 강좌] 13. 파일 처리 (0) | 2020.08.30 |
[파이썬 강좌] 12. 문자열 함수 (0) | 2020.08.29 |
댓글