Study/Python
[Python] 파이썬 변수, 데이터 타입, Container
옹으니
2021. 12. 15. 17:03
728x90
반응형
1.변수 선언 및 데이터 타입¶
In [1]:
a=3
b='python'
c=[1,2,3]
a,b,c
Out[1]:
(3, 'python', [1, 2, 3])
In [2]:
type(b)
Out[2]:
str
2.숫자형(Numeric type)¶
2-01 변수 선언¶
In [1]:
i=20
i
Out[1]:
20
In [3]:
i=0b1001
i
Out[3]:
9
In [5]:
i=0o11
i
Out[5]:
9
In [6]:
i=0x011
i
Out[6]:
17
In [7]:
f = 1.0
f
Out[7]:
1.0
In [8]:
c = 2+3j
c
Out[8]:
(2+3j)
In [34]:
# 오류
8a=10
File "<ipython-input-34-8844c7ad768a>", line 1
8a=10
^
SyntaxError: invalid syntax
In [35]:
# 한글 변수
변수 = 20
변수
Out[35]:
20
2-02 타입확인 및 형변환¶
In [9]:
a = 77
type(77), type(a)
Out[9]:
(int, int)
In [11]:
type(True)
Out[11]:
bool
In [12]:
int(True)
Out[12]:
1
In [14]:
float(77)
Out[14]:
77.0
In [13]:
int(3.14)
Out[13]:
3
In [15]:
bool(0)
Out[15]:
False
In [3]:
bool(1), bool(100), bool(-1)
Out[3]:
(True, True, True)
2-03 산술 연산자¶
In [17]:
7%3
Out[17]:
1
In [18]:
7/4
Out[18]:
1.75
In [19]:
7//4
Out[19]:
1
2-04 비교 및 논리 연산자¶
2-05 False로 취급 받는 것¶
In [20]:
int(True), int(False)
Out[20]:
(1, 0)
In [6]:
bool(None), bool(False), bool(0), bool(0.0), bool(0j), bool(""), bool([]), bool(()), bool({})
Out[6]:
(False, False, False, False, False, False, False, False, False)
In [7]:
bool(1), bool(3.14), bool('A'), bool([1, 2])
Out[7]:
(True, True, True, True)
2-06 비교 연산자¶
In [8]:
A = 300
B = 300
A == B
Out[8]:
True
In [9]:
A = 300
B = 300
A != B
Out[9]:
False
In [10]:
A = 300
B = 300
A is B
Out[10]:
False
In [11]:
A = 127
B = 127
A is B
Out[11]:
True
In [12]:
id(A), id(B)
Out[12]:
(140715997204064, 140715997204064)
In [13]:
type(10) is int
Out[13]:
True
2-07 논리 연산자¶
In [54]:
a = 10
b = 20
c = 31
a < b and a%2==0 and a == c
Out[54]:
False
In [52]:
a < b
Out[52]:
True
In [53]:
a%2==0
Out[53]:
True
In [14]:
True and True, True and False
Out[14]:
(True, False)
In [17]:
True or True, True or False
Out[17]:
(True, True)
In [18]:
not True, not False
Out[18]:
(False, True)
3.문자열¶
3-01 문자열 선언¶
In [38]:
# "Python" 의 type은 무엇인가?
type('Python')
Out[38]:
str
In [4]:
'hello jaen'
Out[4]:
'hello jaen'
In [5]:
'Python is Easy'
Out[5]:
'Python is Easy'
In [6]:
"""Hello JA, JA is a Big Company"""
Out[6]:
'Hello JA, JA is a Big Company'
In [7]:
myStr4 = """Hello JA, JA is a Big Company
Hi Jerry"""
print(myStr4)
Hello JA, JA is a Big Company
Hi Jerry
In [8]:
mystr5 ='Hello JA, JA is a Big Company\nHi Jerry'
print(mystr5)
Hello JA, JA is a Big Company
Hi Jerry
In [9]:
mystr6 = 'a\tb'
print(mystr6)
a b
3-03 문자열 연산자¶
In [12]:
A = 'Py'
B = 'thon'
c= A+B
c
Out[12]:
'Python'
In [13]:
A = 'Python'
B = A*3
B
Out[13]:
'PythonPythonPython'
In [16]:
myStr = "python"
myStr[0]
Out[16]:
'p'
In [17]:
myStr[5]
Out[17]:
'n'
In [18]:
myStr[-1]
Out[18]:
'n'
In [19]:
myStr[1:4]
Out[19]:
'yth'
In [23]:
myStr[1:], myStr[1:6], myStr[-5:]
Out[23]:
('ython', 'ython', 'ython')
In [24]:
myStr[:4]
Out[24]:
'pyth'
In [26]:
myStr[::2]
Out[26]:
'pto'
In [27]:
myStr[::-1]
Out[27]:
'nohtyp'
3-04 문자열 연습문제¶
In [25]:
# 다음을 인덱싱하여 성별을 나타내는 숫자를 출력하세요.
pin = "881120-1064533"
# code here
pin[7], pin[-7]
Out[25]:
('1', '1')
In [28]:
# 다음을 슬라이싱하여 날짜는 date 변수에 날씨는 weather 변수에 저장 후 출력하세요
msg = "20180522Rainy"
# code here
date = msg[:8]
weather = msg[8:]
date, weather
Out[28]:
('20180522', 'Rainy')
3-05 문자열 포맷팅¶
In [28]:
x = 100
'x is %d' %x
Out[28]:
'x is 100'
In [29]:
cnt = 'five'
'I eat %s apples.' %cnt
Out[29]:
'I eat five apples.'
In [30]:
A = 3
B = 7
'%d + %d = %d'%(A, B, A+B)
Out[30]:
'3 + 7 = 10'
In [31]:
A = 3.141592
'%0.2f' % A
Out[31]:
'3.14'
In [68]:
import time
now = time.localtime()
print('현재 시각은 %d년 %d월 %d일 %d시 %d분 %d초 입니다' % (now.tm_year, now.tm_mon, now.tm_mday,
now.tm_hour, now.tm_min, now.tm_sec))
현재 시각은 2021년 3월 8일 13시 19분 33초 입니다
In [70]:
# str.format()
# place holder : { }
print('my name is {}, {} years old'.format('Hong', 27))
# {idx}
print('my name is {1}, {0} years old'.format(27, 'Hong'))
# {key}
print('my name is {name}, {age} years old'.format(name='Hong', age=27))
# {:format}
print('Count : {:3d}EA, Price : ${:.2f}'.format(1, 12.3456))
my name is Hong, 27 years old
my name is Hong, 27 years old
my name is Hong, 27 years old
Count : 1EA, Price : $12.35
In [71]:
# f-string(python 3.6+)
name = 'Hong'
age = 27
f'my name is {name}, {age} years old'
Out[71]:
'my name is Hong, 27 years old'
In [72]:
f'{100-age} years left until you are 100.'
Out[72]:
'73 years left until you are 100.'
3-06 문자열 관련 함수, 메서드¶
In [33]:
a = ','
a.join('edef')
Out[33]:
'e,d,e,f'
In [34]:
j = 'a:b:c:d'
In [35]:
type('가')
Out[35]:
str
In [36]:
'가'.encode('utf-8')
Out[36]:
b'\xea\xb0\x80'
In [37]:
type('가'.encode('utf-8'))
Out[37]:
bytes
4.기본 입출력¶
4-01 print 함수¶
print(value, sep=' ', end='\n', …)
- value를 표준 출력 장치(screen)에 출력 - value 가변 길이
- sep : 출력되는 value 들 사이 분리 기호 - 기본 값 : 공백(‘ ‘)
- end : 출력 문자열 마지막 문자 - 기본 값 : 줄 바꿈 문자
In [1]:
# 변수보기
a = 'abcd'
b = 1234
b
a
Out[1]:
'abcd'
In [3]:
display(a)
display(b)
'abcd'
1234
In [9]:
print('안녕하세요')
print('안녕하세요')
print('안녕하세요')
안녕하세요
안녕하세요
안녕하세요
In [10]:
print(123, end=' ')
print(456)
123,456
In [148]:
print('123', end='\t')
print('abc')
123 abc
In [15]:
print('abc')
print()
print()
print()
print()
print('abc')
abc
abc
In [15]:
print('abc', end='')
print('abc', end='')
print('abc')
abcabcabc
In [12]:
print('abc',10, 20, 30, sep=' ')
abc,10,20,30
In [20]:
print('abc',10, 20, 30, sep=',')
abc,10,20,30
In [147]:
print("120", 123, 'aaasdfsd', sep=':')
120:123:aaasdfsd
4-02 input 함수¶
input(prompt='문자열')
- 문자열 키보드 입력, 숫자를 입력해도 문자열로 인식됨
- prompt : 입력을 안내할 문자열, 생략가능
- 반환되는 type은 str 임
In [13]:
# 이름을 입력받는 예
name = input('이름을 입력하세요: ')
name
이름을 입력하세요: 12312mmadskfdk+++!@3123
Out[13]:
'12312mmadskfdk+++!@3123'
In [2]:
# 숫자를 하나 입력 받아 정수로 변환하여 num 이라는 이름을 부여합니다.
num = int(input('숫자: '))
num
숫자: 132
Out[2]:
132
In [22]:
data = input('입력').split()
data
입력111 111 222
Out[22]:
['111', '111', '222']
In [21]:
type('가')
Out[21]:
str
In [22]:
'가'.encode('utf8')
Out[22]:
b'\xea\xb0\x80'
In [23]:
type('가'.encode('utf8'))
Out[23]:
bytes
5.자료구조 (Container)¶
Sequence Type
- Common mutable
- 리스트(list)
- Common immutable:
- 튜플(tuple)
- Range
- Text immutable
- 문자열(str)
- Binary: bytes(immut.), bytearray(mut.)
Set Type
- 집합(set) : 순서가 없고 중복을 허용하지 않음
Mapping
- 사전(dict) : Key와 Value 형태로 데이터를 저장함
5-01 Sequence Type의 공통 특징¶
- '+', '*' 연산의 사용
- indexing, slicing의 사용
In [38]:
a = [1,2,3]
b = [4,5,6]
a+b
Out[38]:
[1, 2, 3, 4, 5, 6]
In [39]:
a*3
Out[39]:
[1, 2, 3, 1, 2, 3, 1, 2, 3]
5-02 리스트(list)¶
- 리스트는 여러 가지 형태의 값을 하나의 순서가 있는 배열 형태로 묶어 놓은 것
- 리스트는 모든 type의 객체를 item으로 할 수 있음
- 파이썬에서 가장 많이 사용되며, 유연한 구조의 데이터 타입
- 리스트 내의 항목들은 쉼표로 구분하고 사각 괄호[ ] 안에 포함됨
- Slicing을 이용하여 리스트의 일정 범위 항목을 쪼개어 가져오거나 한 항목을 가져올 수 있음
- 리스트의 각 항목은 변겨이 가능
- x[0] = 10
5-02-01 리스트(list) 생성¶
In [83]:
# 대괄호와 콤마의 사용
mylist = [1, 3, 5, 7]
mylist
Out[83]:
[1, 3, 5, 7]
In [155]:
# 요소가 1개인 리스트 생성
mylist = [1]
mylist
Out[155]:
[1]
In [160]:
# list 함수를 사용
mylist = list('123456789')
mylist
Out[160]:
['1', '2', '3', '4', '5', '6', '7', '8', '9']
In [ ]:
# 빈(empty) 리스트 생성
mylist = []
mylist = list()
In [161]:
# list의 크기
x = [157, 49, 'Latte', ['SoYoung Yoon', 25]]
# x의 요소의 개수(=크기)는?
Out[161]:
4
In [165]:
len(x[-1])
Out[165]:
2
5-02-02 리스트 인덱싱 및 리스트 슬라이싱¶
In [30]:
a = 'hello python world'
a[0], type(a[0])
Out[30]:
('h', str)
In [31]:
my = [1,2,3,4]
my[0], type(my[0])
Out[31]:
(1, int)
In [32]:
a = 'hello python world'
a[0:1], type(a[0:1])
Out[32]:
('h', str)
In [33]:
my = [1,2,3,4]
my[0:1], type(my[0:1])
Out[33]:
([1], list)
In [167]:
# 문자열의 indexing 및 slicing 결과
a = 'hello python world'
type(a[-1]), type(a[:])
Out[167]:
(str, str)
In [8]:
mylist = [7, 3, 8, 9, 1, 4]
mylist[0], mylist[-6]
Out[8]:
(7, 7)
In [9]:
type(mylist[0])
Out[9]:
int
In [10]:
mylist = [7, 3, 8, 9, 1, 4]
type(mylist[1:3])
Out[10]:
list
In [172]:
# 결과와 동일하도록 slice를 채워 보세요
Out[172]:
[7, 3, 8]
In [173]:
Out[173]:
[1, 4]
In [174]:
mylist[::-1] # 뒤집기
Out[174]:
[4, 1, 9, 8, 3, 7]
5-02-03 2차원 리스트 인덱싱¶
In [184]:
mylist = [1,[3,5,7],[5,7,9]]
mylist[:1]
Out[184]:
[1]
In [178]:
mylist = [[1,3,5],[3,5,7],[5,7,9]]
mylist, type(mylist)
Out[178]:
([[1, 3, 5], [3, 5, 7], [5, 7, 9]], list)
In [177]:
# 출력에 알맞은 index 번호를 넣어 보세요.
Out[177]:
([1, 3, 5], list)
In [180]:
type(mylist[1][1])
Out[180]:
int
In [183]:
mylist = [[1,3,5],[3,5,7],[5,7,9]]
mylist[:1]
Out[183]:
[[1, 3, 5]]
5-02-04 리스트 수정¶
In [49]:
a = [1, 2, 3]
a
Out[49]:
[1, 2, 3]
In [50]:
a[2] = 4
a
Out[50]:
[1, 2, 4]
In [51]:
a[1:2] = ['c', 'd', 'e']
a
Out[51]:
[1, 'c', 'd', 'e', 4]
In [52]:
a[1] = ['c', 'd', 'e']
a
Out[52]:
[1, ['c', 'd', 'e'], 'd', 'e', 4]
5-02-05 리스트 요소 추가¶
In [40]:
a = [1, 2, 3]
a.append(4)
a
Out[40]:
[1, 2, 3, 4]
In [41]:
a = [1, 2, 3]
a.insert(0, 4)
a
Out[41]:
[4, 1, 2, 3]
In [55]:
score = [['math', 89], ['english']]
score[1].append(85)
score
Out[55]:
[['math', 89], ['english', 85]]
5-02-06 리스트 요소 삭제¶
In [46]:
a = [1,2,3]
del a[1]
a
Out[46]:
[1, 3]
In [47]:
a = [1,2,3]
print(a.remove(1))
a
None
Out[47]:
[2, 3]
In [48]:
a = [1,2,3]
print(a.pop(1))
a
2
Out[48]:
[1, 3]
5-02-07 리스트 기타 함수¶
In [56]:
a = [1,2,3,4]
a.reverse()
a
Out[56]:
[4, 3, 2, 1]
In [57]:
a = [1,4,2,3]
a.sort()
a
Out[57]:
[1, 2, 3, 4]
In [58]:
a = [1,2,3,1,2,3,1]
a.count(1)
Out[58]:
3
In [59]:
a = [1,2,3]
a.extend([4,5])
a
Out[59]:
[1, 2, 3, 4, 5]
5-02-08 리스트 연습문제¶
In [60]:
mylist = [1,3,5,4,2]
mylist[::-1]
Out[60]:
[2, 4, 5, 3, 1]
In [61]:
str(['Python','is','too','interesting'])
Out[61]:
"['Python', 'is', 'too', 'interesting']"
In [62]:
mylist = ['Python','is','too','interesting']
' '.join(mylist)
Out[62]:
'Python is too interesting'
5-03 튜플(tuple)¶
- 데이터 변경이 불가능한 Common Sequence Type
- 튜플은 소괄호( )와 콤마(,)를 사용하여 작성
- 튜플은 값의 추가, 수정, 제거가 불가능함, 조회만 가능
- 튜플의 인덱싱과 슬라이싱은 리스트와 동일
- 값의 수정이 불필요한 경우 리스트보다 튜플을 사용하는 것이 효율적임
- 메모리 사용이 적음
5-03-01 튜플(tuple) 생성¶
In [20]:
a = 10
b = 20
a, b
Out[20]:
(10, 20)
In [21]:
# 소괄호 내부에 요소(item, element)를 콤마(,)로 구분하여 나열함
t = (1, 2, 3)
t
Out[21]:
(1, 2, 3)
In [22]:
# tuple 함수 사용 (list가 tuple로 변경됨)
t = tuple([1,3,5])
t
Out[22]:
(1, 3, 5)
In [63]:
t = tuple(range(0, 10))
t
Out[63]:
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
In [23]:
t = 1, 2, 3 # 소괄호를 이용하지 않고 생성
t
Out[23]:
(1, 2, 3)
In [24]:
# 요소가 1개만 있는 tuple 생성 (콤마가 반드시 필요함)
t1 = (1, )
t2 = 1,
In [25]:
t = (1)
print(t, type(t))
1 <class 'int'>
In [64]:
t1 = (1,2,3)
t1[0]
Out[64]:
1
In [65]:
t1[0] = 1
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-65-a75f7beedda4> in <module>
----> 1 t1[0] = 1
TypeError: 'tuple' object does not support item assignment
In [66]:
import sys
sys.getsizeof([1,2,3]), sys.getsizeof((1,2,3))
Out[66]:
(80, 64)
5-04 range¶
In [67]:
list(range(0, 20, 1))
Out[67]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
In [68]:
list(range(20))
Out[68]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
In [69]:
r = range(0,20,2)
r
Out[69]:
range(0, 20, 2)
In [70]:
11 in r
Out[70]:
False
In [71]:
10 in r
Out[71]:
True
In [72]:
r.index(10)
Out[72]:
5
In [73]:
r[5]
Out[73]:
10
5-05 시퀀스 타입들간의 변환¶
In [79]:
myStr = 'Python'
list(myStr)
Out[79]:
['P', 'y', 't', 'h', 'o', 'n']
In [80]:
tuple(myStr)
Out[80]:
('P', 'y', 't', 'h', 'o', 'n')
In [81]:
str(tuple(myStr))
Out[81]:
"('P', 'y', 't', 'h', 'o', 'n')"
In [82]:
myList = ['hello', 'dong', 'jin']
' '.join(myList)
Out[82]:
'hello dong jin'
In [83]:
list('python')
Out[83]:
['p', 'y', 't', 'h', 'o', 'n']
In [84]:
tuple('python')
Out[84]:
('p', 'y', 't', 'h', 'o', 'n')
In [85]:
''.join(list('python'))
Out[85]:
'python'
In [86]:
''.join(tuple('python'))
Out[86]:
'python'
5-06 사전 (딕셔너리)¶
5-06-01 사전(dict) 생성 및 연산¶
In [87]:
a = {1:'b'}
a[2] = 'c'
a['name'] = 'tom'
a
Out[87]:
{1: 'b', 2: 'c', 'name': 'tom'}
In [88]:
a['name'] = 'Jerry'
a
Out[88]:
{1: 'b', 2: 'c', 'name': 'Jerry'}
In [89]:
del a[1]
a
Out[89]:
{2: 'c', 'name': 'Jerry'}
In [90]:
a.pop('name')
Out[90]:
'Jerry'
In [ ]:
# dict 함수 이용
# key는 문자열만 사용가능하며, 이름규칙을 따른다
# dict(key=value, key=value, ...) => dict(**kwargs) 라고 표기
a = dict(m = 'b', 지역='서울')
a
Out[ ]:
{'m': 'b', '지역': '서울'}
In [ ]:
# key는 변경 불가능한 객체(immutable) 만 사용 가능
# immutable : 숫자, 문자열, tuple
b = {(1,2): 'tuple'}
print(b, b[(1, 2)])
{(1, 2): 'tuple'} tuple
In [93]:
a = dict(m = 'b', 지역='서울')
a['지역'] = '인천'
a
Out[93]:
{'m': 'b', '지역': '인천'}
In [94]:
a['이름'] = '홍길동'
a
Out[94]:
{'m': 'b', '지역': '인천', '이름': '홍길동'}
In [95]:
# dict.update(dict), dict.update(key=value, key=value, ...)
# 여러 아이템을 수정/추가
a.update({'이름': '흥부', 'age':1000, '지역':'어디게?'})
a
Out[95]:
{'m': 'b', '지역': '어디게?', '이름': '흥부', 'age': 1000}
In [96]:
a.update(age=123, m='x')
a
Out[96]:
{'m': 'x', '지역': '어디게?', '이름': '흥부', 'age': 123}
5-06-02 사전(dict)의 메서드¶
In [101]:
a = {'name':'tom', 'phone':'01012345678', 'birth':1212}
In [102]:
a.keys()
Out[102]:
dict_keys(['name', 'phone', 'birth'])
In [103]:
a.values()
Out[103]:
dict_values(['tom', '01012345678', 1212])
In [104]:
a.items()
Out[104]:
dict_items([('name', 'tom'), ('phone', '01012345678'), ('birth', 1212)])
In [105]:
a['name']
Out[105]:
'tom'
In [106]:
a.get('name')
Out[106]:
'tom'
In [107]:
a['이름']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-107-f54dc346649a> in <module>
----> 1 a['이름']
KeyError: '이름'
In [108]:
a.get('이름')
In [109]:
'name' in a
Out[109]:
True
In [110]:
'age' in a
Out[110]:
False
5-06-03 사전 연습문제¶
In [111]:
A = {'A':90, 'B':80, 'C': 70}
print(A.pop('B'))
A
80
Out[111]:
{'A': 90, 'C': 70}
5-07 집합(set)¶
- 집합은 중괄호 {} 안에 콤마(,)로 값들을 구분
- 중복을 허용하지 않으며 순서가 없음
5-07-01 집합 생성¶
In [113]:
a = {'a', 'b', 'c'}
In [114]:
a, type(a)
Out[114]:
({'a', 'b', 'c'}, set)
In [116]:
b = set('cdecde')
b
Out[116]:
{'c', 'd', 'e'}
In [117]:
a|b
Out[117]:
{'a', 'b', 'c', 'd', 'e'}
In [118]:
a.union(b)
Out[118]:
{'a', 'b', 'c', 'd', 'e'}
In [119]:
a&b
Out[119]:
{'c'}
In [120]:
a.intersection(b)
Out[120]:
{'c'}
5-07-03 집합을 사용한 중복제거¶
In [123]:
s = set('Hello')
s
Out[123]:
{'H', 'e', 'l', 'o'}
In [124]:
s1 = set([1,2,3])
s1
Out[124]:
{1, 2, 3}
In [126]:
myList = list(s1)
myList
Out[126]:
[1, 2, 3]
In [127]:
myList = tuple(s1)
myList
Out[127]:
(1, 2, 3)
In [128]:
a = [1,1,2,2,3,4,4,5,6,7,2]
a = list(set(a))
a.sort(reverse=True)
print(a)
[7, 6, 5, 4, 3, 2, 1]
In [53]:
set('python') & set('world') & set('hello')
Out[53]:
{'o'}
In [54]:
set('python') | set('world') | set('hello')
Out[54]:
{'d', 'e', 'h', 'l', 'n', 'o', 'p', 'r', 't', 'w', 'y'}
In [55]:
set(['X1', 'X2', 'X3'] ) & set(['X4', 'X2', 'X3'] ) & set(['X1', 'X5', 'X3'] )
Out[55]:
{'X3'}
728x90