브런치 한입

Python 간단한 찾아보기 본문

코딩/Python

Python 간단한 찾아보기

TAEHONG 2021. 12. 19. 21:21

Ctrl + F 해서 필요한거 찾아서 보세요.

 

관련 내용은 이 내용이 전부임

 

 ★★, ★★★, ★★★★★, format, 벡터별 연산, type, 차이점, alias, import, ''' , math , trunc,


dir, lambda, can only concatenate list (not "int") to list, <map object at 0x0000000002F83DA0>,


%d format: a number is required, not list,

 

 

# ★★ 기억해둘 것

v1=[1,2,3]

v1[0:2]     # 하면 마지막 자리는 출력이 안되고 0과 1까지만 출력된다.

# 파이썬은 0이 첫번째를 의미한다.

 

v1[1]

v1[0]

v1[0:1]    # 슬라이스 형태

 

v1=[1,2,[3,4]]

>>> v1

[1, 2, [3, 4]]

 

# ★★★ 벡터별 연산 안됨.

>>> v1=[1,2,3]

>>> v1+4

Traceback (most recent call last):

 File "<pyshell#10>", line 1, in <module>

   v1+4

TypeError: can only concatenate list (not "int") to list    # 벡터별 연산 안됨.

 

# 리스트 출력

l1=[1,2,3]

print(l1)

 

[1, 2, 3]

 

# 벡터 -> 리스트

# 차이점

# 1. ★★★ 원소별 연산 불가(산술연산 포함 => 적용함수사용)

# 2. 리스트 내 리스트 중첩 사용가능

# 3. 색인 비슷 list[n:m] : n ~ m-1 까지 추출

 

# 포맷 변경 구문

# "리턴 포맷" % (원본대상)

# 포맷의 종류 : %d(정수), %s(문자열), %f(실수) ...등등

# ★★★

>>> type(v1)    # class확인

<class 'list'>

 

>>> print("%d / %d = %d, %f"  % (100, 200, 0.5, 0.5) )

100 / 200 = 0, 0.500000   

# 0.5가 0 만 출력된 것은 %d 가 정수 출력이라서 소수점 앞에만 출력된 것임..

# 0.500000 출력된 것도, %f 이기 때문에 본연의 값 그대로 출력된 것임..

 

>>> a1 = 100

>>> print(a1)

100

 

a1=100

print("%.2f" % a1) # .2f  소수 둘째 자리 까지 출력

100.00

 

>>> print("%.5d" % a1)  # 앞에 '.' 이 있어서 0 으로 채워진듯, 거의 안쓰는 형태

00100

 

>>> print("%5d" % a1)  # 100포함 5자리

 100

 

>>> print("%05d" % a1)  # 100포함 5자리인데 공백은 0으로 채움

00100

 

>>> print('%d %d' % (2 ,3))

2 3

 

>>> print('%d + %d' % (2 ,3))  # print로 출력만 될뿐이며, 실제로 연산되지는 않음

2 + 3

 

>>> print('%d %02d' % (2,3))  # %02d 는 출력상 0을 붙인 것이므로 출력상으로 0이 결합

2 03

 

# format  사용하는 법 ★★★

>>> print('{1:d} {0:02d}' .format(2,3))

3 02

 

>>> print('{0:d} {1:5d} {2:05d}' .format(123,123,123))

123   123 00123

 

>>> print('{2:d} {1:5d} {0:05d}' .format(333,222,111))   # {2:d}의 2는 순서(111에 해당)

111   222 00333

 

>>> print('{0:d} {1:5d} {2:05d}' .format(333,222,111))

333   222 00111

 

>>> print('{1:d} {0:5d} {2:05d}' .format(333,222,111)) # format자리 이해하면 쉬움.

222   333 00111



# ★ R과 비교해서 용어 기억하기.

 

# R의 ‘패키지’ == Python의 ‘모듈’

 

# R의 ‘library’ == Python의 ‘import’

 

# '.'은 하위 모듈을 불러올때 쓴다.  '~의' 느낌



>>> import math   # 모듈을 불러오는 방법(기존에 이미 설치되었을 경우)

>>> math.trunc(1.789465)  # trunc 는 math 의 하위 함수이다.

1

>>> import math as ma   # 모듈을 호출할 때, alias 사용 가능하다.

     

>>> ma.trunc(1.49849)   # as 예시

1

 

>>> dir(ma)  # 특정 함수에 속해 있는 하위 함수 확인 가능

     

['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos',

'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign',

'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs',

'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot',

'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log',

'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder',

'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']



# '''  ''' 사용 방법(엔터를 포함하는 문자열 생성)

>>> aaa='''dhwbdhwbw    

dwdw

dwd

w

dwdwdwdw'''  #  '  3개를 사용하면 엔터를 갖는 문자열 생성할 수 있음

 

>>> aaa

     

'dhwbdhwbw\ndwdw\ndwd\nw\ndwdwdwdw'   # 엔터 위치에 \n 포함되서 출력



>>> a1 = 'a'

>>> a2 = 'b'

>>> a3 = 'c'

>>> a1 + a2 + a3

     

'abc'  # '+'는 문자열의 결합이다.

 

>>> emp$year + emp$mon + emp$day  # 이 경우 emp$year처럼 각 컬럼 안에 1개씩 있으면

                                 # '+'로 결합이 가능하다고 함.



>>> l1 = [1,2,3]

>>> l1 + 10

 

Traceback (most recent call last):

 File "<pyshell#60>", line 1, in <module>

   l1 + 10

TypeError: can only concatenate list (not "int") to list   # 벡터별 원소 연산은 안됨.

 

# ★★★ 중요함.

>>> l1 + [10,10,10]

 

[1, 2, 3, 10, 10, 10]     # 리스트와 리스트의 합은 '리스트의 확장'이다.



# ★★★ lambda를 사용한 사용자 정의 함수 생성

# 간단한 input과 output 처리

 

lambda  input :  output

 

f1 = lambda x(input) : x + 10(output)    # 심플한 사용자 정의함수 만드는 법.

 

f1 = lambda x : x+10

f1(12)

22

 

f1 <- function(x) {

   return(x + 10)

   }

 

# R의 사용자함수와 Python의 사용자 함수 비교해본다.

 

# ★★★★★ 적용함수

# - apply : 행별, 컬럼별 연산(그룹연산)

 

# - map : 원소별 연산( R 의 sapply와 동일한 기능 )

 

>>> f1 = lambda x : x+10    

>>> map(f1,l1)

     

<map object at 0x0000000002F83DA0> # 에러는 아니지만,

                                                                # map은 출력 기능이 없고 메모리상에서만 연산

 

>>> list(map(f1,l1))     #  list 라는 형식을 이용하여 출력해준다.

[11, 12, 13]

 

>>> print('%02d' % l1)

     

Traceback (most recent call last):

 File "<pyshell#82>", line 1, in <module>

   print('%02d' % l1)

TypeError: %d format: a number is required, not list   

# print는 list 가 아니라서 list 로 바로 출력 안됨

 

# 0을 붙인채로 숫자를 출력해본다면…---------------------------------------------------------

>>> f2 = lambda x : print('%02d' % x)

>>> list(map(f2,l1))

     

01

02

03

[None, None, None]       # 사용자 정의함수에서 print 를 제외하고 다시 출력하면,(아래)

 

>>> f2 = lambda x : '%02d' % x       

>>> list(map(f2,l1))

     

['01', '02', '03']      # 앞에 0을 붙이고 출력

---------------------------------------------------------------------------------------------------------------

 

>>> f3 = lambda x : 0 + x            # 여기서 '+'는 연산 기능을 한다.

>>> list(map(f3,l1))                      # 왜냐하면 0은 숫자이며, 결합으로 사용하는 것이 아님

     

[1, 2, 3]          # 그래서 결과값이 0을 연산해서 그대로 출력된 것

 

##

## ★★★★★ 원소별 연산이나 적용이 직접 안되므로, lambda와 적용함수를 활용 해야함

##

'코딩 > Python' 카테고리의 다른 글

Python 에서 자주 발생하는 Error  (0) 2021.12.19
Comments