공부/Python

[점프 투 파이썬 ] 02장 자료형

순제로 2023. 4. 8. 19:14
728x90

출처: https://wikidocs.net/book/1

 

점프 투 파이썬

이 책은 파이썬이란 언어를 처음 접해보는 독자들과 프로그래밍을 한 번도 해 본적이 없는 사람들을 대상으로 한다. 프로그래밍을 할 때 사용되는 전문적인 용어들을 알기 쉽게 풀어서 …

wikidocs.net

숫자형
# 실수형
a = 1.2
a = -3.45

#  실수형 소수점 표현 방식
a = 4.24E10 #4.24*10^10
a = 4.24e-10 # 4.24*10^-10

# 8진수
a= 0o177

# 16진수
a = 0x8ff
a = 0xABC
# 사칙연산
a = 3
b = 4
a + b

7

a-b

-1

a*b

12

a/b

0.75

# x의 y제곱을 나타내는 **연산자
a = 3
b = 4
a **b

81

 

문자열 자료형
# 큰 따옴표(")로 양쪽 둘러싸기
"Hello World"

# 작은 따옴표(')로 양쪽 둘러싸기
'Python is fun'

# 큰 따옴표 3개를 연속(""")으로 써서 양쪽 둘러싸기
"""Life is too short, you need python"""

# 작은 따옴표 3개를 연속으로 써서 양쪽 둘러싸기
'''Life is too short, you need python'''
# 문자열 안에 작은 따옴표나 큰 따옴표를 포함시키고 싶을 때

# 문자열에 작은 따옴표(') 포함시키기
food = "Python's favorite food is perl"
food
# 작은 따옴표로 문자열 둘러싸기
food = 'Python's favorite food is perl'
food

-에러 발생

# 문자열 에 큰 따옴표(") 포함시키기
say = '"Python is very easy." he says'
say

"Python is very easy." he says

 

# 백슬래시(\)를 사용해서 작은 따옴표(')와 큰 따옴표(") 문자열에 포함시키기
food = 'Python\'s favorite food is perl'
say = "\"Python is very easy. \" he says"
food
say

"Python is very easy." he says

 

# 여러 줄인 문자열을 변수에 대입하고 싶을 때
multiline = "Life is too short\nYou need python"
multiline

Life is too short
You need python

multiline='''
Life is stoo short
You need python
'''

print(multiline)

Life is stoo short You need python

 

이스케이프 코드

# 문자열 더해서 연결해기(Concatenation)
head = "Python"
tail = " is fun!"
head + tail

Python is fun!

# 문자열 곱하기
a = "python"
a * 2

pythonpython

# 문자열 곱하기 응용
# multistring.py

print("="*50)
print("My Program")
print("="*50)

==================================================

My Program

==================================================

# 문자열 길이 구하기
a = "Life is too short"
len(a)

17

a = "Life is too short, You need Python"
a[3]

e

a[-1]

n

# 문자열 슬라이싱
a = "Life is too short, You need Python"
b = a[0]+a[1]+a[2]+a[3]
b

Life

c = a[0:4]
c

Life

c = a[0:5]
c

Life 

a[0:2]

Li

a[12:17]

short

# 슬라이싱으로 문자열 나누기
a = "20100331Rainy"
year = a[:4]
date = a[:8]
weather = a[8:]
date

20100331

weather

Rainy

year

2010

# 예제: Pithon 이라는 문자열을 Python으로 바꾸려면?
a = "Pithon"
a[1]

i

 

#문자열의 요솟값은 바꿀 수 있는 값이 아니기 때문이다(문자열 자료형은 그 요솟값을 변경할 수 없다. 그래서 immutable한 자료형이라고도 부른다).
a[1] = y

NameError: name 'y' is not defined

 

문자열 포메팅

# 숫자 바로 대입
"I eat %d apples." % 3

I eat 3 apples.

# 문자열 바로 대입
"I eat %s apples" %"five"

I eat five apples

#숫자 값을 나타내는 변수로 대입
number = 3
"I eat %d apples." %number

I eat 3 apples.

# 2개 이상의 값 넣기
number = 10
day = "three"
"I ate %d apples. so i was sick for %s days" %(number, day)

I ate 10 apples. so i was sick for three days

 

문자열 포멧 코드

# %s 포멧 코드, 어떤 형태의 값이든 변환해 넣을 수 있다.
"I have %s apples" %3

I have 3 apples

"rate is %s" %3.234

rate is 3.234

#포매팅 연산자 %d와 %를 같이 쓸 때는 %%를 쓴다
 "Error is %d%%." %96

Error is 96%.

 "Error is %s%%." %0.96

Error is 0.96%.

 

# 포멧 코드와 숫자 함께 사용하기

# 정렬과 공백
"%10s" % "hi"

        hi

"%-10s" % "hi"

hi        

# 소수점 표현하기
"%0.4f" %3.12134234

3.1213

"%10.4f" %3.12134234

    3.1213

# format 함수를 사용한 포매팅

# 숫자 바로 대입하기
"I eat {0} apples".format(3)

I eat 3 apples

# 문자열열 바로 대입하기
"I eat {0} apples".format("five")

I eat five apples

# 2개 이상의 값 넣기
number = 10
day = "three"
"I ate {0} apples. so I was sick for {1} days.".format(number, day)

I ate 10 apples. so I was sick for three days.

# 이름으로 넣기
"I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)

I ate 10 apples. so I was sick for 3 days.

# 인덱스와 이름을 혼용해서 넣기
"I ate {0} apples. so I was sick for {day} days".format(10, day=3)

I ate 10 apples. so I was sick for 3 days

# 왼쪽 정렬
"{0:<10}".format("hi")

hi        

#오른쪽 정렬
"{0:>10}".format("hi")

        hi

#가운데 정렬
"{0:^10}".format("hi")

    hi    

# 공백 채우기
"{0:=^10}".format("hi")

====hi====

"{0:!<10}".format("hi")

hi!!!!!!!!

"{0:!>10}".format("hi")

!!!!!!!!hi

#소수점 표현하기
y = 3.42134234
"{0:0.4f}".format(y)

3.4213

"{0:10.4f}".format(y)

    3.4213

# { 또는 } 문자 표현하기
"{{and}}".format()

{and}

 

# f 문자열 포메팅
name = '홍길동'
age = 30
f'나의 이름은 {name}입니다. 나이는 {age} 입니다.'

나의 이름은 홍길동입니다. 나이는 30 입니다.

age = 30
f' 나는 내년이면 {age+1}살이 된다.'

 나는 내년이면 31살이 된다.

d = {'name':'홍길동', 'age':30}
f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'

나의 이름은 홍길동입니다. 나이는 30입니다.

# 정렬
f'{"hi":<10}' # 왼쪽 정렬

hi        

f'{"hi":>10}' # 오른쪽 정렬

        hi

f'{"hi":^10}' # 가운데 정렬

    hi    

# 공백 채우기
f'{"hi":=^10}' # 가운데 정렬하고 = 문자로 공백 채우기

====hi====

f'{"hi":!<10}' # 왼쪽 정렬하고 ! 문자로 공백 채우기

hi!!!!!!!!

# 소수점 표현하기
y = 3.42134234
f'{y:0.4f}'

3.4213

 

f'{y:10.4f}'

    3.4213

# 문자열에서 {} 표시하기
f'{{and}}'

{and}

 

문자열 관련 함수
# 문자 개수 세기(count)
a = "hobby"
a.count('b')

2

# 위치 알려주기1(find)
a = "Python is the best choice"
a.find('b')

14

a.find('k')

-1

# 위치 알려주기2(index)
a = "Life is too short"
a.index('t')

8

a.index('k')

ValueError: substring not found

# 문자열 삽입(join)
",".join('abcd')

a,b,c,d

",".join(['a','b','c','d'])

a,b,c,d

# 소문자를 대문자로 바꾸기(upper)
a = "hi"
a.upper()

HI

# 대문자를 소문자로  바꾸기(lower)
a = "HI"
a.lower()

hi

# 왼쪽 공백 지우기 (lstrip)
a = " hi "
a.lstrip()

 hi

# 오른쪽 공백 지우기 (rstrip)
a.rstrip()

 hi

# 양쪽 공백 지우기(strip)
a.strip()

hi

# 문자열 바꾸기(replace)
a = "Life is too short"
a.replace("Life", "Your leg")

Your leg is too short

# 문자열 나누기(split)
a.split()

['Life', 'is', 'too', 'short']

b = "a:b:c:d"
b.split(':')

['a', 'b', 'c', 'd']

리스트 자료형
# 리스트란?: 대괄호로 감싸주고, 요소값은 쉼표로 구분
# 리스트 안에는 어떠한 자료형도 포함시킬 수 있다.
odd = [1,3,5,7,9]
odd

[1, 3, 5, 7, 9]

# 리스트의 인덱싱
a = [1,2,3]
a

[1, 2, 3]

a[0] + a[1]

3

a[-1]

3

a = [1, 2, 3, ['a','b','c']]
a[0]

1

a[-1]

['a', 'b', 'c']

a[-1][1]

b

# 삼중 리스트에서 인덱싱하기
a = [1,2,['a','b', ['Life', 'is']]]
a[2][2][0]

Life

# 슬라이싱: 나눈다
a = "12345"
a[0:2]

12

a[:2]

12

a[2:]

345

# 중첩된 리스트에서 슬라이싱 하기
a = [1,2,3,['a','b','c'],4,5]
a[2:5]

[3, ['a', 'b', 'c'], 4]

a[3][:2]

['a', 'b']

 

  • 리스트 연산하기
# 리스트 더하기
a = [1,2,3]
b = [4,5,6]
a + b

[1, 2, 3, 4, 5, 6]

# 리스트 반복하기(*)
a = [1,2,3]
a * 3

[1, 2, 3, 1, 2, 3, 1, 2, 3]

# 리스트 길이 구하기
a = [1,2,3]
len(a)

3

  • 리스트 수정과 삭제
# 리스트에서 값 수정하기
a = [1,2,3]
a[2] = 4
a

[1, 2, 4]

# del 함수 사용해 리스트 요소 삭제하기
a = [1,2,3]
del a[1]
a

[1, 3]

# 슬라이싱 기법으로 여러개 삭제
a = [1,2,3,4,5]
del a[2:]
a

[1, 2]

  • 리스트 관련 함수
    • 리스트 변수 이름 뒤에 '.'를 붙여서 여러 가지 리스트 관련 함수를 사용할 수 있다.
# 리스트에 요소 추가(append)
a = [1,2,3]
a.append(4)
a

[1, 2, 3, 4]

a.append([5,6])
a

[1, 2, 3, 4, [5, 6]]

# 리스트 정렬(sort)
a = [1,4,3,2]
a.sort()
a

[1, 2, 3, 4]

# 리스트 알파벳 순서로 정렬
a = ['a','d','c','b']
a.sort()
a

['a', 'b', 'c', 'd']

# 리스트 뒤집기 (reverse)
a. reverse()
a

['d', 'c', 'b', 'a']

# 인덱스 반환(index)
a = [1,2,3]
a.index(3), a.index(2)

(2, 1)

# 리스트에 요소 삽입
a = [1,2,3]
a.insert(0,4)
a

[4, 1, 2, 3]

# 리스트에 요소 제거
a.remove(4)
a

[1, 2, 3]

# 요소 끄집어 내기 (pop): 리스트의 맨 마지막 요소 리턴 후 삭제
a = [1,2,3]
a.pop()
a

[1, 2]

a.pop(1)

2

a

[1]

# 리스트에 포함된 요소 x의 개수 세기(count)
a = [1,2,3,1]
a.count(1)

2

# 리스트 확장(extend): extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다.
a.extend([4,5])
a

[1, 2, 3, 1, 4, 5]

#a.extend([4, 5])는 a += [4, 5]와 동일하다.a = [1,2,3]
a += [6,7]
a

[1, 2, 3, 1, 4, 5, 6, 7]

튜플 자료형
  • 리스트는 [ ]으로 둘러싸지만 튜플은 ( )으로 둘러싼다.
  • 리스트는 요소 값의 생성, 삭제, 수정이 가능하지만 튜플은 요소 값을 바꿀 수 없다.
# 튜플 요솟솟값 삭제, del 안된다.
t1 = (1,2,'a','b')
del t1[0]
TypeError: 'tuple' object doesn't support item deletion
# 튜플 요솟값 변경, 안된다.
t1[0] = 'c'

TypeError: 'tuple' object does not support item assignment

  • 튜플 다루기
# 인덱싱 하기
t1[0]

1

t1[3]

b

# 슬라이싱 하기
t1 = (1,2,'a','b')
t1[1:]
(2, 'a', 'b')
# 튜플 더하기
t1 = (1,2,'a','b')
t2 = (3,4)
t3 = t1 + t2
t3
(1, 2, 'a', 'b', 3, 4)
# 튜플 곱하기
t3 = t2*3
t3

(3, 4, 3, 4, 3, 4)

# 튜플 길이 구하기
len(t1)
4
딕셔너리 자료형
  • 대응 관계, 연관 배열(Associative array) 또는 해시(Hash)
  • 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다
# 딕셔러니 기본 모습
dic = {'Key1':'Value1', 'Key2':'Value2', 'Key3':'Value3'}
# 예제를 통한 딕셔너리
dic = {'name':'pey', 'phone':'010-1234-5678', 'birth':'1212'}
 
# Key로 정수값 1, Value로 문자열 'hi'
a = {1:'hi'}
a[1]

hi

# Value에 리스트도 넣을 수 있다.
a = {'a':[1,2,3]}
a['a']

[1, 2, 3]

  • 딕셔너리 쌍 추가, 삭제
a = {1:'a'}
a[2] = 'b'
a

{1: 'a', 2: 'b'}

a['name'] = 'pey'
a
{1: 'a', 2: 'b', 'name': 'pey'}
a[3] = {1,2,3}
a

{1: 'a', 2: 'b', 'name': 'pey', 3: {1, 2, 3}}

# 딕셔너리 요소 삭제하기
del a[1]
a

{2: 'b', 'name': 'pey', 3: {1, 2, 3}}

  • 딕셔너리르 사용하는 방법
# 딕셔너리에 Key 사용해 Value 얻기
grade = {'pey':10, 'julliet':99}
grade['pey']
10
  • 딕셔너리 주의사항
    • Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시
a{1:'a', 1:'b'}
a[1]

SyntaxError: invalid syntax

  • 딕셔너리 관련 함수들
# Key 리스트 만들기
a = {'name':'pey', 'phone':'010-1234-5678', 'birth':'1118'}
a.keys()

dict_keys(['name', 'phone', 'birth'])

for k in a.keys():
    print(k)

name

phone

birth

for k in a.values():
    print(k)

pey

010-1234-5678

1118

# dict_keys 객체를 리스트로 변환
list(a.keys())

['name', 'phone', 'birth']

# dict_vlaues 객체를 리스트로 변환
list(a.values())
['pey', '010-1234-5678', '1118']
# Key, Value 쌍 얻기(items)
a.items()

dict_items([('name', 'pey'), ('phone', '010-1234-5678'), ('birth', '1118')])

#Key: Value 쌍 모두 지우기(clear)
a.clear()
a

{}

# Key로 Value얻기(get)
# a.get('name')은 a['name']을 사용했을 때와 동일한 결괏값을 리턴
a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
a.get('name'), a.get('phone')
('pey', '010-9999-1234')
# 딕셔너리 안에 찾으려는 Key가 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때
a.get('nokey', 'hello_sooonzero')

hello_sooonzero

#해당 Key가 딕셔너리 안에 있는지 조사하기(in)
a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
'name' in a

True

'email' in a
False
집합 자료형
  • 집합 자료형은 set 키워드를 사용해 만들 수 있다.
  • 중복을 허용하지 않는다.
  • 순서가 없다(Unordered).
s1 = set([1,2,3])
s1
{1, 2, 3}
s2 = set("Hello")
s2
{'H', 'e', 'l', 'o'}
# 집합 자료형을을 인덱싱으로 값을 얻기
s1 = set([1,2,3])
l1 = list(s1)
l1[0]
1
  • 교집합, 합집합, 차집합 구하기
    • set 자료형을 정말 유용하게 사용하는 경우는 교집합, 합집합, 차집합을 구할 때이다.
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
# 교집합
s1 & s2

{4, 5, 6}

# 차집합
s1 - s2

{1, 2, 3}

# 합집합
s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}]
 
  • 집합 자료형 관련 함수들
# 갑 1개 추가하기(add)
s1 = set([1,2,3])
s1.add(4)
s1

{1, 2, 3, 4}

# 값 여러개 추가하기(update)
s1.update([5,6,7])
s1

{1, 2, 3, 4, 5, 6, 7}

# 특정 값 제거하기(remove)
s1.remove(2)
s1
{1, 3, 4, 5, 6, 7}
불 자료형
  • True - 참
  • False - 거짓
a = True
b = False
type(a)

bool

type(b)

bool

1 == 1

True

2>1

True

1>2
False
 
 
  • 자료형의 참과 거짓

a = [1, 2, 3, 4]
while a:
    print(a.pop())

4

3

2

1

  • 불 연산
bool('python')

True

bool('')
False
변수: 자료형의 값을 저장하는 공간
  • 변수 이름 = 변수에 저장할 값
# 리스트 복사
a = [1,2,3]
b = a
id(a)
140667427979584
id(b)
140667427979584
a is b

True

a[1] = 4
b
[1, 4, 3]

 

  • b 변수를 생성할 때 a 변수의 값을 가져오면서 a와는 다른 주소를 가리키도록
#[:] 이용: 리스트 전체를 가리키는 [:]을 사용해서 복사
a = [1,2,3]
b = a[:]
a[1] = 4
a
[1, 4, 3]
b
[1, 2, 3]
# copy 모듈 이용
from copy import copy
a = [1,2,3]
b = copy(a)
b is a
False
 
  • 변수를 만드는 여러 가지 방법
#튜플로 a, b에 값을 대입
a, b = ('python', 'life')
#리스트로 변수 만들기
(a,b) = ['python', 'life']
#여러 개의 변수에 같은 값을 대입
a = b = 'python'
a = 3
b = 5
a, b = b, a
a

5

b
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
728x90