변수


In [1]:
n = 1
n = 3.14
n = "hello, world"
print(n)


hello, world

In [195]:
n=1
type(n)


Out[195]:
int

In [198]:
id(n)


Out[198]:
4353013384

In [196]:
n=3.14
type(n)


Out[196]:
float

In [199]:
id(n)


Out[199]:
4353013384

In [197]:
n="hello, world"
type(n)


Out[197]:
str

In [200]:
id(n)


Out[200]:
4353013384

숫자


In [128]:
type(1)


Out[128]:
int

In [130]:
type(3.14)


Out[130]:
float

In [201]:
type(10000000000000000000000000000000000000)


Out[201]:
long

In [70]:
id(n)


Out[70]:
4299590400

In [134]:
type(6.78e-5)


Out[134]:
float

In [135]:
type(1+2j)


Out[135]:
complex

In [78]:
type(True)


Out[78]:
bool

In [71]:
bool('a')


Out[71]:
True

In [73]:
bool('여성') == bool('남성')


Out[73]:
True

In [67]:
'a' == True


Out[67]:
False

In [68]:
'a' == False


Out[68]:
False

In [69]:
0 == False


Out[69]:
True

In [70]:
-1 == False


Out[70]:
False

숫자 자료형 변경


In [136]:
int(3.14)


Out[136]:
3

In [137]:
float(3)


Out[137]:
3.0

In [138]:
complex(3)


Out[138]:
(3+0j)

In [139]:
int(1+2j)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-139-5f01dff2c7c7> in <module>()
----> 1 int(1+2j)

TypeError: can't convert complex to int

In [140]:
float(1+2j)


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-140-6ae8829a4912> in <module>()
----> 1 float(1+2j)

TypeError: can't convert complex to float

수학 연산


In [116]:
2 + 3.14


Out[116]:
5.140000000000001

In [117]:
2-3.14


Out[117]:
-1.1400000000000001

In [118]:
2 * 3.14


Out[118]:
6.28

In [119]:
2 / 3.14


Out[119]:
0.6369426751592356

In [120]:
2 // 3.14


Out[120]:
0.0

In [121]:
2 % 3.14


Out[121]:
2.0

In [122]:
3.14 ** 2


Out[122]:
9.8596

비교 연산


In [123]:
2 > 3.14


Out[123]:
False

In [124]:
2 <= 3.14


Out[124]:
True

In [125]:
2 == 3.14


Out[125]:
False

In [142]:
2 != 3.14


Out[142]:
True

In [143]:
not 2 == 3.14


Out[143]:
True

In [114]:
True > False


Out[114]:
True

In [115]:
True == False


Out[115]:
False

여러 개의 비교 동시 수행 가능. 왼쪽부터 평가


In [111]:
1 < 2 < 3


Out[111]:
True

In [112]:
1 < 2 < 3 < 2


Out[112]:
False

논리 연산


In [103]:
True and False


Out[103]:
False

In [104]:
True or False


Out[104]:
True

In [144]:
not False


Out[144]:
True

In [105]:
print(n1)
n1 += 1
print(n1)


2
3

문자열


In [15]:
a='one'
b="two"
c="""three
four
five"""

In [16]:
a


Out[16]:
'one'

In [17]:
b


Out[17]:
'two'

In [18]:
c


Out[18]:
'three\nfour\nfive'

In [19]:
print(c)


three
four
five

In [4]:
print("Joe's Sandwich")


Joe's Sandwich

인덱싱


In [213]:
'one'[0]


Out[213]:
'o'

In [214]:
'one'[3]


---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-214-b6d15c534bd7> in <module>()
----> 1 'one'[3]

IndexError: string index out of range

In [205]:
'one'[-1] # 마지막 값


Out[205]:
'e'

In [206]:
'one'[-2]


Out[206]:
'n'

슬라이싱


In [202]:
'one'[1:]


Out[202]:
'ne'

In [204]:
# 0 <=  <5
'one two three'[0:5]


Out[204]:
'one t'

In [9]:
'one two three'[-5:]


Out[9]:
'three'

역순 인덱스


In [207]:
'one'[-2:]


Out[207]:
'ne'

In [208]:
'one two three'[4:7]


Out[208]:
'two'

In [10]:
'one two three'[1::2]


Out[10]:
'n w he'

In [210]:
'python'[::2]


Out[210]:
'pto'

In [211]:
'python'[::-1]


Out[211]:
'nohtyp'

연산자


In [70]:
print('안녕'+'하세요')


안녕하세요

In [8]:
print('파이썬' + str(2))


파이썬2

In [5]:
print('안녕하세요' - '하세요')


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-9a7478d60482> in <module>()
----> 1 print('안녕하세요' - '하세요')

TypeError: unsupported operand type(s) for -: 'str' and 'str'

In [99]:
print('참 잘했어요! '*10)


참 잘했어요! 참 잘했어요! 참 잘했어요! 참 잘했어요! 참 잘했어요! 참 잘했어요! 참 잘했어요! 참 잘했어요! 참 잘했어요! 참 잘했어요! 

In [220]:
'a'=='b'


Out[220]:
False

In [221]:
'abc' == 'abc'


Out[221]:
True

In [20]:
'a' in 'abc'


Out[20]:
True

In [21]:
'd' in 'abc'


Out[21]:
False

유니코드

파이썬2 인코딩과 유니코드

http://www.slideshare.net/LeeSeongjoo/2-17395073


In [159]:
type('파이썬')


Out[159]:
str

In [161]:
type(u'파이썬')


Out[161]:
unicode

In [212]:
print('안녕'+u'하세요')


---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-212-03b8d3f6dfd9> in <module>()
----> 1 print('안녕'+u'하세요')

UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 0: ordinal not in range(128)

In [179]:
text_str = '빅데이터를 위한 파이썬'
print(text_str[:4])


빅�

한국어와 같은 비 ASCII 문자의 경우, 유니코드가 아니면 여러 가지 문제가 있을 수 있다.


In [180]:
text_unicode = u'빅데이터를 위한 파이썬'
print(text_unicode[:4])


빅데이터

str을 unicode로 변환


In [64]:
text_unicode = '파이썬'.decode('utf-8')
type(text_unicode)


Out[64]:
unicode

unicode를 str으로 변환


In [65]:
text_str = u'파이썬'.encode('utf-8')
type(text_str)


Out[65]:
str

In [66]:
print(text_str)


파이썬

In [62]:
text_str.decode('utf-8')


---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-62-bd2c0992c193> in <module>()
----> 1 text_str.decode('utf-8')

/Users/seongjoo/anaconda/lib/python2.7/encodings/utf_8.pyc in decode(input, errors)
     14 
     15 def decode(input, errors='strict'):
---> 16     return codecs.utf_8_decode(input, errors, True)
     17 
     18 class IncrementalEncoder(codecs.IncrementalEncoder):

UnicodeDecodeError: 'utf8' codec can't decode byte 0xc6 in position 0: invalid continuation byte

In [218]:
'성주' == u'성주'


/Users/seongjoo/anaconda/lib/python2.7/site-packages/IPython/kernel/__main__.py:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  if __name__ == '__main__':
Out[218]:
False

도전 과제

변수 lang에는 ‘파이썬’, version 에는 숫자 2를 저장한다. 두 변수를 활용해 다음을 출력한다.

현재 사용되는 파이썬 버전은 2.x 입니다.


In [6]:
lang = '파이썬'
version = 2
print('현재 사용되는 ' + lang + ' 버전은 ' + str(version) + '.x 입니다.')


현재 사용되는 파이썬 버전은 2.x 입니다.

도전과제

변수 text에는 문자열 '빅데이터를 위한 파이썬'이 저장되어 있다. 문자열에서 '파이썬'만 추출해 변수 lang에 저장한다.


In [11]:
text_en = 'python for data'
text_en[-4:]


Out[11]:
'data'

In [13]:
text_kr = '빅데이터를 위한 파이썬'
print(text_kr[-3:])



In [63]:
text = u'빅데이터를 위한 파이썬'
print(text[-3:])


파이썬

list


In [45]:
x = 1
y = x
y = 2
print(x)


1

In [50]:
numbers = [1,2,3,4,5]
type(numbers)


Out[50]:
list

In [51]:
NS = numbers[:]
NS


Out[51]:
[1, 2, 3, 4, 5]

In [52]:
id(NS) == id(numbers)


Out[52]:
False

In [53]:
NS is numbers


Out[53]:
False

In [54]:
NS[0]=0
print(numbers)


[1, 2, 3, 4, 5]

인덱싱


In [5]:
print(numbers[1])
numbers[1] = 4
print(numbers)
print(numbers[-1])


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

슬라이싱


In [6]:
numbers[2:]


Out[6]:
[3, 4, 5]

In [7]:
numbers[2:4]


Out[7]:
[3, 4]

In [8]:
numbers[-2:]


Out[8]:
[4, 5]

In [45]:
# 역순으로 
numbers[::-1]


Out[45]:
[5, 4, 3, 2, 1]

In [52]:
print(id(numbers))
print(id(numbers[::-1]))
numbers.reverse()
print(numbers)


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

다차원 자료에서 파이썬 리스트 슬라이싱의 한계


In [50]:
data_2d = [[1,2,3], [4,5,6], [7,8,9]]
data_2d[1][:2]
# 열 방향 자료 슬라이싱 ... 은 불가.
[data_2d[1][1], data_2d[2][1]]
# 한계 극복을 위해 NumPy 도입


Out[50]:
[5, 8]

In [16]:
alist = [4,2,3]
alist.append(5)
print(alist)


[4, 2, 3, 5]

In [17]:
alist.pop(0)
print(alist)


[2, 3, 5]

연산자


In [64]:
[1,2]+[3,4]


Out[64]:
[1, 2, 3, 4]

In [18]:
[1,2]*2


Out[18]:
[1, 2, 1, 2]

In [19]:
[1,2]*[1,2]


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-19-8a4e0229d0bf> in <module>()
----> 1 [1,2]*[1,2]

TypeError: can't multiply sequence by non-int of type 'list'

In [67]:
[1,2] * 3


Out[67]:
[1, 2, 1, 2, 1, 2]

In [59]:
[1,2] == [3,4]


Out[59]:
False

In [60]:
[1,2] == [1,2]


Out[60]:
True

In [61]:
[1,2] == [2,1]


Out[61]:
False

값 비교는 첫 번째부터


In [62]:
[1,2] > [3,4]


Out[62]:
False

In [63]:
[1,2] < [3,4]


Out[63]:
True

list와 문자열


In [182]:
list('python')


Out[182]:
['p', 'y', 't', 'h', 'o', 'n']

In [183]:
list(u'파이썬')


Out[183]:
[u'\ud30c', u'\uc774', u'\uc36c']

In [191]:
import string
text = string.join(['a','b','c'])
print(text)


a b c

In [194]:
text = string.join([u'파', u'이', u'썬'], '')
print(text)


파이썬

dict


In [13]:
profile = {'name': '이성주', 
           'email': 'seongjoo@codebasic.co'}
print(profile['email'])


seongjoo@codebasic.co

In [14]:
'twitter' in profile


Out[14]:
False

dict의 새 필드 추가


In [15]:
profile['twitter'] = '@LeeSeongjoo'
print(profile)


{'twitter': '@LeeSeongjoo', 'name': '\xec\x9d\xb4\xec\x84\xb1\xec\xa3\xbc', 'email': 'seongjoo@codebasic.co'}

In [85]:
data = [['남자1호', '남자2호', '남자3호'], 
        ['여자1호', '여자2호', '여자3호']]

In [87]:
for name in data[0][1:3]:
    print(name)


남자2호
남자3호

In [88]:
for name in [data[0][1], data[1][1]]:
    print(name)


남자2호
여자2호

도전과제

각 사람은 이름, 이메일, 나이의 정보를 갖는다. 이 사람들의 정보를 {name: ... , email: ... , age:...}와 같은 형태로 표현한다. 세 명의 사람의 정보를 설정하시오.

a. 전화번호 정보를 추가하시오.

b. 모든 사람의 나이에 1을 더해 정보를 갱신하시오.


In [25]:
people = [{'name': '이성주', 
           'email': 'seongjoo@codebasic.co',
           'age': 32}, 
          {'name': '권태형',
           'email': 'taeyoung@email.com',
           'age': 15},
          {'name': '김경철',
           'email': 'kyungchul@email.com',
           'age': 20}]

# 모든 사람의 나이에 1을 더하기
for person in people:
    person['age'] += 1
    
print(people[0])


{'age': 33, 'name': '\xec\x9d\xb4\xec\x84\xb1\xec\xa3\xbc', 'email': 'seongjoo@codebasic.co'}

tuple


In [26]:
tup = (1,2)

In [30]:
tup[0]


Out[30]:
1

In [31]:
tup[1:]


Out[31]:
(2,)

In [32]:
tup[0] = 4 # 오류!


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-b571ddf20e13> in <module>()
----> 1 tup[0] = 4 # 오류!

TypeError: 'tuple' object does not support item assignment

tuple unpacking


In [38]:
a,b = (1,2, 3)


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-38-5bdc869a2759> in <module>()
----> 1 a,b = (1,2, 3)

ValueError: too many values to unpack

In [37]:
print(a)
print(b)


(1, 2)
2

In [69]:
tup = (1,2,3)

In [73]:
tup[1:]


Out[73]:
(2, 3)

속성 사용 (.)


In [17]:
numbers = [1,2,3,4,5]
type(numbers)


Out[17]:
list

In [18]:
numbers.append(6)
print(numbers)


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

In [20]:
profile = {'name':'이성주'}
type(profile)


Out[20]:
dict

In [21]:
age = profile.get('age',-1)
print(age)


-1

In [22]:
numbers.get('age', '-1') # 오류!


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-22-70935ff5462f> in <module>()
----> 1 numbers.get('age', '-1')

AttributeError: 'list' object has no attribute 'get'

In [23]:
profile.append('email') # 오류!


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-23-9033ec256b76> in <module>()
----> 1 profile.append('email')

AttributeError: 'dict' object has no attribute 'append'