파이썬 (0307) 1주차

자료형
Author

김보람

Published

March 7, 2022

자료형

- 파이썬의 기본자료형은 int, float, bool, str, list, tuple, dict, set 등이 있다.

  • 0차원 자료형: int, float, bool
  • 1차원 자료형: str, list, tuple, dict, set

0차원

- int형

a=100
type(a)
int

- float형

a?
a=1.2*3
type(a)
float

- bool형

a=True   # 숫자1
b=False  # 숫자0
type(a)
bool
# bool형의 연산
a+b
1

- complex형

a=1+2j
b=2-2j
a
(1+2j)
type(a)
complex
a+b
(3+0j)
type(a+b)
complex

- 형태변환: float -> int

a=3.0
type(a)
float
a=int(a)
a?
a=3.14
int(a)

# 0.14날라가고 3만나옴. 정보의 손실이 있다.
3

- 형태변환: int $$ float

a=3
type(a)
int
a=float(a)
type(a)
float

- 형태변환: bool $$ int/float

(예시1)

a=True
type(a)
bool
int(a)
1
float(a)
1.0

(예시2)

a=1
bool(a)
True

(예시3)

a=1.0
bool(a)
True
a=0.0
bool(a)
False

- 이상한 형태변환도 가능하다

bool(-3.14)
True
bool(3.14)
True
bool(0)
False
bool(3.24342)
True
# 위와 같은 코드를 의도적으로 사용하진 않는다. 

- 형태변환이 항상 가능한 것도 아님

float(3+0j) # 사실상 3+0j= 3이므로 float으로 형변환하면 3.0이 되어야 할 것 같은데 오류가 남
TypeError: can't convert complex to float

- 암묵적형변환 (implicit)

(예비학습) implicit의 의미 - 추운날씨 -> 보일러좀 틀자! 명시적(explicit) / 오늘 날씨가 좀 춥지 않아? (implicit) - 짜장면 먹을래? -> 싫어 (explicit) / 난 어제 짜장면 먹었는데… (implicit)

int(True) #명시적
1
True * 1 # 암묵적형
1
1 * 1.0
1.0
True+True
2

1차원

- str

# 선언
a='br'
a
'br'
# 연산
# 더하기 연산
a='x'
b='2'
a+b
'x2'
# 빼기 연산 없다. 
a-b
TypeError: unsupported operand type(s) for -: 'str' and 'str'
# 곱하기 연산
a*2
'xx'
2*a
'xx'
# 의미상 맞지 않는 것은 수행되지 않는다.
a='x'
b='y'
a+b
'xy'
a*b
TypeError: can't multiply sequence by non-int of type 'str'
# 나눗셈연산은 없다. 
a='xx'
a/2
TypeError: unsupported operand type(s) for /: 'str' and 'int'

인덱싱

- str은 하나의 벡터 문자가 여러개 있는 형태라고 생각하기

a='boram'
a
'boram'
  • 5개의 칸에 글씨가 하나씩 들어가 있음
a[0]  # 0이 첫번쨰 원소
'b'
a[1] # 두번째 원소
'o'
# 마지막 원소를 호출하려면 -1로 호출할 수도 있다.
a[-1]
'm'
a[4]
'm'
a[-2]
# 마지막에서 2번째 원소는 -2로 호출 가능
'a'
  • 어려개의 원소는 :을 이용하여 호출할 수 있음
a[0:3] # a[0], a[1], a[2]까지만 뽑힌다. a[3]은 호출되지 않는다.
'bor'
a[1:3]
'or'
  • index=1부터 시작해서 마지막 원소까지 호출하려면?
a[5]
IndexError: string index out of range
a[1:5]  # a[5]는 없는데,, 이렇게 쓰니까 헷갈릴 수 있다.
'oram'
a[1:-1]   # 이것은 a[1:4] 와 같음
'ora'
# 해결책! 생략한다.
a[1:]
'oram'

- 생략의 응용1

a='k-pop'
a
'k-pop'
a[2:]
'pop'
a[2:5]
'pop'

- 생략의 응용2

a='k-pop'
a
'k-pop'
a[0:2]
'k-'
a[:2]   # 앞을 생략하면 첫 원소부터 나온다.
'k-'

- 생략의 응용3

a='k-pop'
a
'k-pop'
a[:]
'k-pop'
a[0:5]
'k-pop'

str특수기능

- 파이썬의 변수는 단순히 정보를 담는 그릇이 아니다. 유용한 기능을 제공하는 경우가 있다.

a='ABCD'  #a라는 변수는 'ABCD'라는 정보를 담는 그릇의 역할만 하지 않고, 특화된 어떠한 기능도 제공한다.
a
'ABCD'
a.lower() #소문자변환
'abcd'
# lower()는 문자열에 특화된 기능이며 아래 내용은 안됨
a=3.14
a.lower()
AttributeError: 'float' object has no attribute 'lower'

- 자료형에 특화된 기능(=함수)을 확인하는 방법 a. + tab 으로 목록 확인 가능

a='boram'
a.lower?
a.upper()   # 대문자 변환
# upper(a)
'BORAM'
a.capitalize()
'Boram'

- 마음의눈: a.f() 형태를 읽는 팁 - a.f()f(a)로 생각하면 편리함 - a.f(2)f(a,2)로 생각하면 편리함 - 이런점에서 R %>% 연산자와 비슷하다고 생각할 수 있다. (약간 다름)

- 사실 .은 좀 더 다양한 상황에서 쓰일 수 있다. 변수이름.함수이름() 의 형태가 아니라 - 패키지이름.함수이름() - 패키지이름.변수이름 - 패키지이름.패키지이름.함수이름()

… 와 같이 다양한 형태가 가능하다. 근본적인 고통점은 .을 기준으로 상위개념.하위개념으로 이해하는 것이 좋다.

0차원 vs 1차원

- len 함수 : 원소의 갯수를 알려주는 함수

(0차원) len함수가 동작하지 않는다.

a=3.14
len(a)
TypeError: object of type 'float' has no len()
b=True
len(b)
TypeError: object of type 'bool' has no len()

(1차원) len함수가 잘 동작함

a='3.14'
len(a)
4
b=[1,2,3]
len(b)
3

숙제

a='BoramKim'
a
'BoramKim'
a[:5]
'Boram'
a[5:]
'Kim'