cyphen156

Chapter2 파이썬의 자료형 본문

프로그래밍/Python

Chapter2 파이썬의 자료형

cyphen156 2022. 9. 5. 13:18

변수

자료형의 값들을 저장할 수 있는 공간

  • 변수명 = 값 을 통해 변수를 저장하고, 사용할 수 있다. ex) object = "first made object"
  • 필요에 따라 변수에 저장된 값을 변경, 추가, 삭제할 수 있다.
  • 일부 자료형들은 값의 변경을 허용하지 않는 경우도 있다.
  • 파이썬의 모든 자료형은 객체변수이다.
  • del(변수명)을 통해 이미 생성된 변수를 메모리에서 제거할 수 있다.
  • 변수에 리스트를 저장하여 복사할 때는 주의가 필요하다.
>>> a , b = ('Python', 'C')
>>> a
'Python'
>>> b
'C'

>>> a = 'Javascript'		# a에 저장된 값 'Javascript'로 변경하기
>>> a
'Javascript'
>>> [a, b]
['Javascript', 'C']

>>> a, b = b, a			# a와 b의 값 서로 변경하기
>>> a, b			## 다른 언어에서는 temp를 통해 임시변수를 만들어 값을 변경해야 한다.
('C', 'Javascript')		### temp = a, a = b, b = temp

>>> del(a)			#변수 a제거, 이후 a를 사용하거나 검색하면 
>>> a				#a라는 변수가 존재하지 않으므로 오류가 뜬다
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

***** 변수에 리스트 복사하기 *****
>>> list1 = [1, 2, 3]
>>> list2 = list1
>>> list1.append(4)		# list1에만 4를 추가했지만 list2에도 4라는 요소가 추가되어있는것을 알 수 있다.
>>> list2			# 변수 list1, list2가 모두 [1, 2, 3, 4]라는 리스트가 저장되어있는
[1, 2, 3, 4]			# 메모리를 참조하고 있기 때문이다.

***** 다른 메모리에 저장된 리스트를 만들어 변수에 저장하기. *****
>>> list3 = ['a', 'b', 'c']		#[:]을 이용한 리스트 복사
>>> list4 = list3[:]

>>> from copy import copy		#copy모듈을 통한 리스트 복사
>>> list5 = copy(list3)
>>> list4, list5
(['a', 'b', 'c'], ['a', 'b', 'c'])

>>> list3.append('d')		#list3에 요소('d')가 추가되었지만
>>> list4, list5		#list4와 list5의 메모리 주소가 서로 다르므로 요소에 변경이 없는 것을 알 수 있다.
(['a', 'b', 'c'], ['a', 'b', 'c'])

>>> list4 is list5
False

숫자형

숫자형
정수 -1, 0, 3 등의 정수
실수 -3.756, 4.256, 3.756e-10, 4.24E10 등 소숫점이 포함된 숫자
복소수 1+2j, 3-4J
8진수 0o177, 0O561
16진수 0xaf7, 0x9b2

복소수 : 복소수의 허수부분에 영어 소문자j 또는 대문자 J를 붙여 표기한다.[각주:1]

8진수 : 숫자0과 영어 소문자o 또는 대문자O를 숫자 앞에 표기하여 8진수로 읽는 수임을 표기해준다.

16진수 : 숫자0과 영어 소문자x를 숫자 앞에 표기하여 16진수로 읽는 수임을 표기해준다.

연산자

  • + : 덧셈연산자 1 + 2 = 3
  • -  : 뺄셈연산자 1 - 2 = -1
  • *  : 곱셈연산자 1 * 2 = 2
  • ** : 거듭제곱연산자 2**3 = 8
  • /   : 나눗셈연산자 3 / 2 = 1.5
  • //  : 나눗셈연산자(소숫점 버림) 3 // 2 = 1
  • % : 나머지연산자 9 % 5 = 4

문자형

파이썬의 문자열 사용법
1. 큰따옴표("")로 둘러싸기
"Hello World"
2. 작은따옴표('')로 둘러싸기
'Python is fun'
3. 큰따옴표 3개 연속으로 둘러싸기
"""Life is too short, You need python"""
4. 작은따옴표 3개 연속으로 둘러싸기
'''Life is too short, You need python'''

문자열 안에 따옴표를 포함시키고 싶을 때
    → 포함시키고 싶은 따옴표('', "")와 다른 따옴표("", '')로 문자열을 감싸면 된다.

Python's favorite food is perl라는 문자열을 표현하고 싶을 때

1. 같은 따옴표로 문자열을 둘러쌋을 때
>>> food = 'Python's favorite food is perl'
File "<stdin>", line 1
	food = 'Python's favorite food is perl'
    			   ^
SyntaxError: invalid syntax
'Python'이 문자열로 인식되어 구문 오류가 발생한다.

2. 다른 따옴표로 문자열을 둘러쌋을 때
>>> food = "Python's favorite food is perl"
>>> food
"Python's favorite food is perl"
정상적으로 문자열을 인식한다.

여러 줄인 문자열을 변수에 대입하고 싶을 때

"""
예를 들어 다음의 문장을 하나의 변수에 대입하고 싶을 때
Life is too short
You need python
문자열 안에 \n을 통해 줄을 바꿔준다
"""

>>> multiline = "Life is too short\nYou need python"

#또는
#연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""")를 이용한다

>>> multiline = '''
    Life is too short
    You need python
    '''

이스케이프 코드(\를 이용한 특수문자 표현하기)

프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 '문자 조합'

코드 설명
\n 줄을 바꿀 때 사용
\t 탭 간격을 줄 때 사용
\\ 문자 \를 표현할 때 사용
\' 작은따옴표(')를 표현할 때 사용
\" 큰따옴표(")를 표현할 때 사용
\r 캐리지 리턴(줄바꿈 문자,
현재 커서를 맨 앞으로 이동)
\f 폼 피드(줄바꿈 문자, 현재 커서를 다음 줄로 이동)
\a 알람 소리를 발생시킴
\b 백 스페이스
\000 공백 문자(null)

문자열의 연산

문자열을 +를 이용해 더하여 연결할 수 있다.

문자열에 *를 이용하여 해당 문자열을 곱할 수 있다.

인덱싱

변수에 저장한 문자열을 각 문자마다 번호를 매겨 순서를 지정해 추출해내는 방법

변수[인덱스 번호]를 통해 사용한다.

인덱스 번호는 0번부터 시작한다.

찾고자 하는 번호에 -를 붙이면 문자열의 맨 뒤에서부터 역순으로 찾을 수 있다.

슬라이싱

문자열에서 한 문자만을 뽑아내는 것이 아닌 여러개의 문자들을 추출해내는 방법

변수[시작번호:끝번호+1]를 통해 사용한다. 

→끝번호 +1인 이유는 슬라이싱의 범위가 시작번호 <= 변수 < 끝번호까지이기 때문에 마지막 문자까지 추출하려면 +1을 해줘야 한다.

시작번호를 생략하면 0번 인덱스부터 시작한다.

변수[시작번호:-끝번호-1]을 통해 시작번호부터 맨 뒤에서부터 끝번호까지 역순으로 찾을 수 있다.

>>> a = "Life is too short, You need Python"

### 인덱싱
>>> a[0]
'L'

>>> a[-3]
h

### 슬라이싱
>>> a[5:10+1]
'is too'
### 스페이스바(공백문자 = ' ')또한 하나의 문자이므로 인덱싱이 된다

>>> a[17:-6]
', you need '

포매팅

문자열 내에 어떠한 값을 삽입하는 방법

C언어에서의 scanf_s를 통한 입출력과 비슷하게 생각하면 된다.

"""
문자열 포맷 코드
%s			문자열
%c			문자 1개
%d			정수
%f			부동 소수
%0.숫자+f		부동소수의 소숫점 자릿수를 해당숫자까지 표현한다.
%o			8진수
%x			16진수
%%			Literal %(문자 '%' 자체)
%숫자+포맷		숫자만큼의 문자열이 만들어져 오른 정렬을 하고 남는 공간은 공백으로 채운다.
			-숫자는 왼쪽 정렬을 한다.
"""

>>> "I have %s apples" % "two"
'I have two apples'

>>> "%0.3f" %3.142134234
'3.142'

>>> "Error is %d%%." % 98
'Error is 98%.'

>>> "%10s" %"hello
'     hello'

문자열 관련 내장 함수

변수.함수명()을 통해 내장함수를 사용한다.

"""
count			문자열 안에 해당하는 문자의 개수를 센다.
find			해당 문자가 처음 나온 위치를 반환한다./존재하지 않는다면 -1을 반환한다.
index			해당 문자가 처음 나온 위치를 반환한다./find와 다르게 존재하지 않는다면 오류가 발생한다.
join			각 문자 사이에 변수의 값을 삽입한다.
upper			해당 문자열을 전부 대문자로 바꾼다.
lower			해당 문자열을 존부 소문자로 바꾼다.
strip			문자열의 양쪽에 존재하는 공백을 모두 지운다.
lstrip			문자열의 왼쪽에 존재하는 공백을 모두 지운다.
rstrip			문자열의 오른쪽에 존재하는 공백을 모두 지운다.
replace("a", "b")	문자열에서 해당하는 문자열(a)을 찾아 다른 문자열(b)로 바꾼다.
split('기준문자')	문자열을 기준문자를 기준으로 나눈다.
"""
>>> a = "Life is too short, You need Python"
>>> a.count('s')
2

>>> a.find('s')
6
>>> a.find('k')
-1

>>> a.index('k')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

>>> b = '!'
>>> b.join(a)
'L!i!f!e! !i!s! !t!o!o! !s!h!o!r!t!,! !Y!o!u! !n!e!e!d! !P!y!t!h!o!n'

>>> a.upper()
'LIFE IS TOO SHORT, YOU NEED PYTHON'

>>> a.lower()
'life is too short, you need python'

>>> c = '   strip     '
>>> c.strip()
'strip'

>>> a.replace("Python", "C")
'Life is too short, You need C'

>>> a.split()
['Life', 'is', 'too', 'short,', 'You', 'need', 'Python']
>>> a.split(',')
['Life is too short', ' You need Python']

고급 문자열 포매팅

"""
format()		문자열 포맷함수		{numbers}안에 .format(a, b ...) a, b ... 순서대로 numbers에 대입된다.
			{a}			.format(a=10)의 방식으로 대입할 수 있다.
	           	{0:(>, <, ^)숫자}	< 왼쪽 정렬, > 오른쪽 정렬, ^ 가운데 정렬
			정렬기호 앞에 ' ', '=' 등의 문자를 입력하면 해당문자로 공백을 채운뒤 정렬된다.
			{{}}			'{}'를 표현한다.
"""	

>>> "I eat {0} apples and {1} bananas".format(3, 7)
'I eat 3 apples and 7 bananas'

>>> "I ate {num} cookies".format(num=10)
'I ate 10 cookies'

>>> "{0:$^10}".format("Hello")
'$$Hello$$$'

>>> "{0:>10}".format("Hello") + "{0:$^10}".format("World")
'     Hello$$World$$$'

리스트(List)

숫자와 문자열만으로는 여러가지 자료들의 집합을 표현하기 어려워서 만들어진 자료형

  • Javascript의 배열과 쓰임이 유사하다.
  • 리스트는 []로 만들고 각 요소들을 ', '로 구분해준다.
  • 리스트의 요소는 공백, 숫자, 문자열, 리스트를 요소로 갖을 수 있다.
  • 문자열과 동일하게 인덱싱과 슬라이싱을 할 수 있다.
  • 리스트 안의 리스트의 요소( list2 = [0, [1, 2], 3])은 중첩(n차원) 배열의 개념(list2[1][2] == 2)으로 접근할 수 있다. 

 ex) list = [0, 1, 2, 3, 'first', 'second', 'third', ['Life', 'Is']]

리스트의 수정, 변경과 삭제

"""
대입					a[n] = 4 → a의 n번 요소에 4를 대입한다.
범위 대입				a[n:m] = ['a', 'b', 'c'...] → a의 n번 요소부터 m번 요소까지 'a', 'b', 'c' ...를 순서대로 대입한다.
공백 요소를 통한 범위 삭제		a[n:m] = [] → a의 n번 요소부터 m-1번 요소까지 모두 삭제한다.
del 객체를 통한 리스트 요소 삭제		del a[k] → a의 k번째 요소를 삭제한다.

리스트 관련 내장함수
append('K')	리스트 요소 추가	→ a의 마지막 요소의 다음 요소로 'K'를 추가한다.
sort()		리스트 정렬		→ a의 요소들을 오름차순으로 정렬한다.()
reverse()	리스트 뒤집기		→ a의 요소들을 역순으로 뒤집어서 저장한다.
index(x)	위치값 반환		→ 리스트 a의 요소중 x의 인덱스를 찾아 반환한다
                                  	  만약 존재하지 않는다면 오류를 출력한다.
insert(index, k)요소 삽입		→ 리스트의 index번째 요소에 k를 삽입하고 
					그 이후 요소들의 인덱스를 1씩 증가시킨다.
                     			  = 중간에 요소 삽입가능
remove(x)	요소 삭제		→ 리스트안의 요소들중 처음 나오는 요소 x를 삭제한다.
pop(X)		요소 추출 & 삭제		→ X번째 요소를 리스트에서 뽑아낸 뒤 삭제한다.
count(x)	리스트의 요소 x개수를 센다
extend(x)	리스트간의 결합(확장)	원래의 리스트 a에 리스트 x를 추가하여 새로운 리스트를 만들고 a에 저장한다.
					a += [x]와 같은 역할을 한다.
"""                    

>>> list = [0, 1, ['a', 'b'], 'T']

>>> list[2][0:1] = 'c'		#요소 'a', 'b'에 c를 대입
>>> list
[0, 1, ['c', 'c'], 'T']

>>> list[1:2] = []		#1번 요소~2-1번 요소까지 삭제
>>> list
[0, ['c', 'c'], 'T']

>>> del list[2]			#2번 요소 삭제
>>> list
[0, ['c', 'c']]

>>> list.append(1)		#마지막 요소로 1 추가
>>> list.insert(1, 2)		#요소 2를 list의 1번 index에 삽입
>>> list
[0, 2, ['c', 'c'], 1]

>>> list.remove(['c', 'c'])	#2번 요소인 리스트['c', 'c']를 삭제
>>> list
[0, 2, 1]

>>> list.sort()			#리스트 오름차순으로 정렬(asc)
>>> list
[0, 1, 2]

>>> list.reverse()		#리스트를 내림차순으로 정렬(desc)
>>> list
[2, 1, 0]

>>> list.extend(['a', 'b'])	#리스트의 마지막에 'a', 'b'를 추가
>>> list
[2, 1, 0, 'a', 'b']

>>> list.pop()			#리스트의 마지막 요소를 반환하고 삭제한다.
'b'
>>> list
[2, 1, 0, 'a']

튜플

튜플은 Final이 선언되어 [각주:2]상수화 된 List라고 생각하면 된다.

  • 리스트의 요소를 변경, 삭제할 수 없다.
  • tuple = (0, 1, 2 ...)를 통해 표현하지만 소괄호를 생략 할 수 있다.
  • 단 1개의 요소만을 갖는 경우 반드시 콤마(,)를 붙여야 한다.
  • 인덱싱과 슬라이싱, 튜플간의 더하기 연산, 곱하기 연산이 가능하다

딕셔너리

Key값과 Value값을 가지고 있는 자료형

  • JSON객체와 유사한 형태를 띄고 있다.
  • dict = { 'key1':1, 2, 3, 'key2':['first', 'second', 'third' ...] ...}의 형태를 통해 사용한다.
  • Key값은 유일해야 한다. ==> Index와 비슷한 역할을 하지만 인덱싱을 지원하는 것은 아니다.
  • 리스트를 Key값으로 사용할 수 없다.
  • Value값은 여러개가 들어갈 수 있다.

딕셔너리 사용과 관련 함수

### 딕셔너리 사용법
"""
dict['key'] = 'values'			dict에 'key'라는 키와 'values'라는 밸류들을 추가한다.
del dict['key']				dict의 'key'라는 키와 'values'라는 밸류들을 삭제한다.
dict['key']				dict에서 키값이 'key'인 'values'들을 찾아 반환한다.
"""

dict = {'과일':['사과', '바나나'],
	'채소':['오이', '청경채']}
dict['num'] = [1, 2, 3, 4]	#key가 'num', values가 [1, 2, 3, 4]인 key - values 쌍 추가
>>> dict
{'과일': ['사과', '바나나'], '채소': ['오이', '청경채'], 'num': [1, 2, 3, 4]}

>>> del dict['과일']		#key가 '과일'인 key - values 쌍 제거
>>> dict
{'채소': ['오이', '청경채'], 'num': [1, 2, 3, 4]}

>>> dict['num']
[1, 2, 3, 4]


### 딕셔너리 관련 함수들
"""
keys()					딕셔너리에서 key값들을 뽑아 리스트를 만든다.
values()				딕셔너리에서 values값들을 뽑아 리스트를 만들어 반환한다.
items()					딕셔너리에서 key-values 쌍을 가져온다.
get('key', 'default')			'key'값을 갖는 values를 모두 반환한다. 
			                만약 'key'가 없을 경우 'default'를 반환한다.
'key' in dict				dict 안에 'key'라는 키가 있을 경우 true, 없을 경우 fauls를 반환한다.
clear()					딕셔너리를 초기화한다 == dict = {}로 만든다.

"""

>>> dict.keys()
dict_keys(['채소', 'num'])

>>> dict.values()
dict_values([['오이', '청경채'], [1, 2, 3, 4]])

>>> dict.items()
dict_items([('채소', ['오이', '청경채']), ('num', [1, 2, 3, 4])])

>>> dict.get('채소')
['오이', '청경채']
>>> dict.get('기타')
>>> dict.get('기타', 'no key')
'no key'

>>> '채소' in dict
True
>>> '과일' in dict
False

>>> dict.clear()
>>> dict
{}

집합

집합과 관련된 자료들을 쉽게 처리하기 위해 만들어진 자료형

  • name = set()을 통해 생성한다.
  • 집합은 중복을 호영호자 않는다.
  • 요소들에 순서가 없다.
  • 인덱싱으로 값을 가져올 수 없다. ==> set을 리스트나 튜플로 변환한 뒤 인덱싱할 수 있다.

집합의 활용

###집합 사이의 연산
"""
교집합					&
합집합					|
차집합					-
"""

>>> set1 = set([1, 3, 2, 4, 5])
>>> set2 = set([0, 2, 4, 6, 8])

>>> set3 = set1 & set2
>>> set3
{2, 4}

>>> set4 = set1 | set2
>>> set4
{0, 1, 2, 3, 4, 5, 6, 8}

>>> set5 = set1 - set2
>>> set5
{1, 3, 5}


###집합 관련 함수
"""
add(x)					값 x 추가
update([x, y, z...])			값 여러개(x, y, z...) 한번에 추가
remove(x)				값 x 제거
"""

>>> set5.add(7)				#set5에 7추가
>>> set5
{1, 3, 5, 7}

>>> set5.update([9, 11, 13])		#set5에 9, 11, 13추가
>>> set5
{1, 3, 5, 7, 9, 11, 13}

>>> set5.remove(11)			#set5에서 11 제거
>>> set5
{1, 3, 5, 7, 9, 13}

Boolean(참/거짓)

자료형의 참(True)거짓(False)를 판별해주는 것

대개 1은 참, 0은 거짓으로 판별한다.

요소가 없는 공백 자료형거짓으로 판별한다.

자료형 참/거짓
숫자형 0이 아닌 숫자
0 거짓
문자열 "Python"
"" 거짓
리스트 [1, 2, 3]
[] 거짓
튜플 () 거짓
딕셔너리 {} 거짓
  None 거짓

 

 

 

 

 

  1. 복소수 관련 내장 함수

    복소수.real = 복소수의 실수 부분을 리턴한다. ex) a = 1+2j일 때 a.real => 1.0

    복소수.imag = 복소수의 허수 부분을 리턴한다. ex) a = 1+2j일 때 a.imag => 2.0

    복소수.conjugate() = 해당 복소수의 켤례 복소수를 리턴해준다. ex) a = 1+2j일 때 a.conjugate() => 1-2j

    abs(복소수) = 복소수의 절댓값을 리턴한다. ex) a = 1+2j일 때 abs(a) => 2.2360679774997898 [본문으로]

  2. 한번 초기화 되고나면 더 이상 내용을 변경할 수 없는 변수 [본문으로]

'프로그래밍 > Python' 카테고리의 다른 글

Chapter2 연습문제  (0) 2022.09.06
Chapter1 파이썬이란?  (0) 2022.07.27