본문 바로가기
Web & Mobile/Python

Lecture 81 - Python(2) 숫자형, 문자열, 이스케이프 코드, 인덱싱, 슬라이싱, 포매팅, 문자열 관련 함수, 리스트, 튜플, 딕셔너리

by Bennyziio 2019. 7. 22.
반응형
현재 HOT한 언어
1. 자바스크립트
        현재 나는 ECMAScript 5를 배운거다.
        -> 6로 버전업중(java와 많이 비슷해짐)
2. python
        2.x -> 3.x
3. swift(추천)
        ios
        Mac용 프로그램
* git -> hub 형태로 발전되어 github라 함
* github(과거에 SVN이라는 것을 사용했었음)
        - 형상관리(소프트웨어 버전관리)
        https://github.com
        
        1. 팀프로젝트 소스 공유
        2. 버전(commit/rollback)

        무료 - 프로젝트 공개
        유료 - 비공개

        https://github.com/search?q=language

        https://www.tiobe.com/tiobe-index/

자료
제어

------------

모듈
        함수 - 자바스크립트
        객체 - 자료
[출처] 20180911_Lecture 82|작성자 베니지오

github 사용 언어 통계
https://github.com/search?q=language

tiobe 사용 언어 통계
https://www.tiobe.com/tiobe-index/

파이썬 숫자형 - 정수형, 실수형
숫자형(Number)이란 숫자 형태로 이루어진 자료형으로 우리가 이미 잘 알고 있는 것들이다.

지수형

>>> a = 4.24E10
>>> print(a)
42400000000.0

8진수와 16진수

a = 3
b = 4
c = a / b
print(c)

소수로 출력이 되었다. 자동 형변환이 되기 때문이다.

연산자

나눗셈 후 나머지 및 몫을 반환하는 연산자

a = 7
b = 4
c = a % b
print(c)

d = a // b
print(d)

주석

'''
Created on 2018. 9. 10.

@author: kitcoop
'''
# print('Hello Python')
# a = 4.24E10
# print(a)

''' '''이 범위 주석
#이 한줄 주석

자바는 ;까지 한줄로 인지하는데 파이선은 ;이 없으므로

a = 3
b = 4

c =
a + b

이러면 에러가 난다. 그러므로 

a = 3
b = 4

c = \
a + b

위와 같이 역슬래쉬를 넣어주면 가능하다. 그러나 거진 한줄로 작성이 가능해서 많이 사용할 일은 없을 것이다.

문자열 자료형

문자열 변수 대입

'''
Created on 2018. 9. 10.

@author: kitcoop
'''
multiline = '''
Life is too short
You need python
'''

print(multiline)

'''
Created on 2018. 9. 10.

@author: kitcoop
'''
multiline = '''Life is too short
You need python
'''

print(multiline)

파이썬 이스케이프 코드

문자열 연산하기 - 문자열 연결, 곱하기

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

문자열 인덱싱과 슬라이싱

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

print(a[0])
print(a[12])
print(a[-1])

print(a[-0])

print(a[-0])
print(a[-2])
print(a[-5])

문자열 슬라이싱

Ex01.slice.py - 슬라이싱으로 문자열 나누기

str = '20010331Rainy'
year = str[:4]
day = str[4:8]
weather = str[8:]

print(year)
print(day)
print(weather)

a = "Pithon"
print(a[:1])
print(a[2:])

python = a[:1] + 'y' + a[2:]
print(python)

문자열 포매팅

문자열 포맷 코드

Ex01.format

number = 3
result = 'I eat %d apples.' % number
print(result)

number = 3
result = 'I eat %d apples.' % number
print(result)

number = 10
day = 'three'
# (number, day) - 튜플
result = 'I ate %d apples. so I was sick for %s days.' % (number, day)
print(result)

귀찮으면 그냥 %s로 받으면 다 받아온다.

문자열도 객체이다. 즉, 메서드다

문자열 관련 함수 - count, find, index, join, upper, lower, lstrip, rstrip, strip, replace, split

Ex01.join

a = ","
result = a.join('abcd')
print(result)

a = ","
result = a.join('abcd')
print(result)

a = "Life is too short"
result = a.replace("Life", "Your leg")
print(result)

a = ","
result = a.join('abcd')
print(result)

a = "Life is too short"
result = a.replace("Life", "Your leg")
print(result)

result = a.split()
print(result)

Ex01.format2 2개 이상의 값 넣기

number = 10
day = "three"
result = "I ate {0} apples. so I was sick for {1} days.".format(number, day)
print(result)

number = 10
day = "three"
result = "I ate {0} apples. so I was sick for {1} days.".format(number, day)
print(result)

# 여러 문자열
number = 10
day = "three"
result = '''
I ate {0} apples.
so I was sick for {1} days.
'''.format(number, day)
print(result)

format - 왼쪽 정렬, 오른쪽 정렬, 가운데 정렬, 공백 채우기

Oracle의 LPAD, RPAD와 비슷

리스트 자료형

리스트의 인덱싱과 슬라이싱

2차 배열 형식으로 접근하면 값을 뽑아올 수 있다

arr = [1, 2, 3, ['a', 'b', 'c']]
print(arr[-1])
print(arr[-1][0])

삼중 리스트에서 인덱싱 하기

리스트의 슬라이싱

중첩된 리스트에서 슬라이싱하기

a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
print(a[2:5])

a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
print(a[2:5])
print(a[3][:2])

리스트 연산자
1) 리스트 더하기(+)

2) 리스트 반복하기(*)

형변환을 해야 한다는 뜻으로 str()이라는 파이썬 내장 함수를 이용하면 된다.

리스트의 수정, 변경과 삭제
1. 리스트에서 하나의 값 수정하기

2. 리스트에서 연속된 범위의 값 수정하기

arr1 = [1, 2, 3]
print(arr1[1:2])

arr1 = [1, 2, 3]
print(arr1[1:2])
arr1[1:2] = ['a', 'b', 'c']
print(arr1)

한 요소(a[1])과 영역으로(a[1:2]) 해서 수정하는 것은 아주 다르다.
한 요소로 하면 배열이 통째로 들어가 버리게 된다

3. [] 사용해 리스트 요소 삭제하기

4. del 함수 사용해 리스트 요소 삭제하기

리스트 관련 함수들
리스트에 요소 추가(append)

리스트 정렬(sort)

리스트 뒤집기(reverse)

위치 반환(index)

리스트에 요소 삽입(insert)

리스트 요소 제거(remove)

리스트 요소 끄집어내기(pop)

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

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

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

리스트에 포함된 요소 x의 개수 세기(count)

리스트 확장(extend)

튜플 자료형

튜플의 요소값을 지우거나 변경하는 법
1. 튜플 요소값 삭제 시 오류

2. 튜플 요소값 변경 시 오류

튜플의 인덱싱과 슬라이싱, 더하기(+)와 곱하기(*)
튜플은 값을 변화시킬 수 없다는 점만 제외하면 리스트와 완전히 동일하다.
1. 인덱싱하기

2. 슬라이싱하기

3. 튜플 더하기

t1 = (1, 2, 'a', 'b')
t2 = 3, 4

t3 = t1 + t2
print(t3)

4. 튜플 곱하기

t1 = (1, 2, 'a', 'b')
t2 = 3, 4

t3 = t1 + t2
print(t3)

t3 = t2 * 3
print(t3)

딕셔너리 자료형
사람은 누구든지 "이름" = "홍길동", "생일" = "몇 월 며칠" 등으로 구분할 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 수 있는 자료형을 가지고 있다. 요즘 사용하는 대부분의 언어들도 이러한 대응 관계를 나타내는 자료형을 갖고 있는데, 이를 연관 배열(Associative array) 또는 해시(Hash)라고 한다.
파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 하는데, 단어 그대로 해석하면 사전이라는 뜻이다. 즉, people이라는 단어에 "사람", baseball이라는 단어에 "야구"라는 뜻이 부합되듯이 딕셔너리는 Key와 Value라는 것을 한 쌍으로 갖는 자료형이다. 예컨대 Key가 "baseball"이라면 Value는 "야구"가 될 것이다.
딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요소값을 구하지 않고 Key를 통해 Value를 얻는다. 이것이 바로 딕셔너리의 가장 큰 특징이다. baseball이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.

딕셔너리 만드는 법

딕셔너리 쌍 추가, 삭제하기
1. 딕셔너리 쌍 추가하기

a = {1: 'a'}
a[2] = 'b'
print(a)

{1: 'a'}라는 딕셔너리에 a[2] = 'b'와 같이 입력하면 딕셔너리 a에 Key와 Value가 각각 2와'b'인 2 : 'b'라는 딕셔너리 쌍이 추가된다.

a = {1: 'a'}
a[2] = 'b'
print(a)

a['name'] = 'pey'
print(a)

딕셔너리 a에 'name': 'pey'라는 쌍이 추가되었다.

a = {1: 'a'}
a[2] = 'b'
print(a)

a['name'] = 'pey'
print(a)

a[3] = [1, 2, 3]
print(a)

Key는 3, Value는 [1, 2, 3]을 가지는 한 쌍이 또 추가되었다.

2. 딕셔너리 요소 삭제하기

a = {1: 'a'}
a[2] = 'b'
print(a)

a['name'] = 'pey'
print(a)

a[3] = [1, 2, 3]
print(a)

del a[1]
print(a)

위의 예제는 딕셔너리 요소를 지우는 방법을 보여준다. del 함수를 사용해서 del a[key]처럼 입력하면 지정한 key에 해당하는 {key : value} 쌍이 삭제된다.

딕셔너리를 사용하는 방법
"딕셔너리는 주로 어떤 것을 표현하는 데 사용할까?"라는 의문이 들 것이다. 예를 들어 4명의 사람이 있다고 가정하고, 각자의 특기를 표현할 수 있는 좋은 방법에 대해서 생각해 보자. 리스트나 문자열로는 표현하기가 상당히 까다로울 것이다. 하지만 파이썬의 딕셔너리를 사용한다면 이 상황을 표현하기가 정말 쉽다.

딕셔너리에서 Key 사용해 Value 얻기

dic1 = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
print(dic1)
print(dic1['name'])
print(dic1['phone'])
print(dic1['birth'])

딕셔너리 만들 때 주의할 사항

중복 key 값이 들어오면 overwrite된다.

딕셔너리 관련 함수들
Key 리스트 만들기(keys)

dic1 = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
print(dic1)
print(dic1['name'])
print(dic1['phone'])
print(dic1['birth'])

list1 = dic1.keys()
print(list1)

dic1 = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
print(dic1)
print(dic1['name'])
print(dic1['phone'])
print(dic1['birth'])

list1 = dic1.keys()
list2 = list(dic1.keys())
print(list1)
print(list2)

Value 리스트 만들기(values)

dic1 = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
print(dic1)
print(dic1['name'])
print(dic1['phone'])
print(dic1['birth'])

list1 = dic1.keys()
list2 = list(dic1.keys())
print(list1)
print(list2)

value1 = dic1.values()
value2 = list(dic1.values())
print(value1)
print(value2)

Key, Value 쌍 얻기(items)

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

Key로 Value얻기(get)

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

dic1 = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
print(dic1)
print(dic1['name'])
print(dic1['phone'])
print(dic1['birth'])

list1 = dic1.keys()
list2 = list(dic1.keys())
print(list1)
print(list2)

value1 = dic1.values()
value2 = list(dic1.values())
print(value1)
print(value2)

print('name' in dic1)
print('email' in dic1)

불 자료형
불(bool) 자료형이란 참(True)과 거짓(False)을 나타내는 자료형이다.
불 자료형은 다음의 2가지 값만을 가질 수 있다.
True - 참
False - 거짓

자료형의 참과 거짓
자료형에 참과 거짓이 있다? 조금 이상하게 들리겠지만 참과 거짓은 분명히 있다. 이는 매우 중요한 특징이며 실제로도 자주 쓰인다.
자료형의 참과 거짓을 구분하는 기준은 다음과 같다.

불 연산

print(bool([1,2,3]))
print(bool([]))
print(bool(0))
print(bool(3))

집합 자료형 - set
집합(set)은 파이썬 2.3부터 지원되기 시작한 자료형으로, 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형이다.
집합 자료형은 다음과 같이 set 키워드를 이용해 만들 수 있다.

형태는 딕셔너리 형태로 나온다.

집합 자료형의 특징
자, 그런데 위에서 살펴본 set("Hello")의 결과가 좀 이상하지 않은가? 분명 "Hello"라는 문자열로 set 자료형을 만들었는데 생성된 자료형에는 l 문자가 하나 빠져 있고 순서도 뒤죽박죽이다. 그 이유는 set에는 다음과 같은 2가지 큰 특징이 있기 때문이다.
- 중복을 허용하지 않는다.
- 순서가 없다(Unordered).
리스트나 튜플은 순서가 있기(ordered) 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 set 자료형은 순서가 없기(unordered) 때문에 인덱싱으로 값을 얻을 수 없다. 이는 마치 02-5절에서 살펴본 딕셔너리와 비슷하다. 딕셔너리 역시 순서가 없는 자료형이라 인덱싱을 지원하지 않는다. 만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한 후 해야 한다.

로또발생기 같은거 만들때 사용하면 좋을 것 같다.

set1 = set([1, 2, 2, 3, 4, 5, 5, 5, 6])
print(set1)
list1 = list(set1)
print(list1)

중복이 제거되어 나왔다. 이후 {}였던 걸 리스트로 바꿈

set1 = set([1, 2, 2, 3, 4, 5, 5, 5, 6])
print(set1)

list1 = list(set1)
print(list1)

tuple1 = tuple(set1)
print(tuple1)

튜플 형식으로 변환

집합 자료형 활용하는 방법 - 교집합, 합집합, 차집합
set 자료형이 정말 유용하게 사용되는 경우는 다음과 같이 교집합, 합집합, 차집합을 구할 때이다.
우선 다음과 같이 2개의 set 자료형을 만든 후 따라 해보자. s1은 1부터 6까지의 값을 가지게 되었고, s2는 4부터 9까지의 값을 가지게 되었다.

1. 교집합

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])

print(s1 & s2)

2. 합집합

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])

# print(s1 & s2)
print(s1 | s2)
print(s1.union(s2))

또는 union 함수를 이용하면 된다. 교집합에서 사용했던 intersection 함수와 마찬가지로 s2.union(s1)을 사용해도 동일한 결과를 리턴한다.

3. 차집합

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])

# print(s1 & s2)
# print(s1 | s2)
# print(s1.union(s2))
print(s1 - s2)
print(s1.difference(s2))

print(s2 - s1)
print(s2.difference(s1))

집합 자료형 관련 함수들
값 1개 추가하기(add)

값 여러개 추가하기(update)

특정 값 제거하기(remove)

자료형의 값을 저장하는 공간, 변수
변수란?
파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다. 객체란 우리가 지금껏 보아 왔던 자료형과 같은 것을 의미하는 말이다.

id 명령

a = [1, 2, 3]
print(id(a))

s = 'hello'
print(id(s))

a = [1, 2, 3]
print(id(a))

# call by reference
b = a
print(id(b))

s = 'hello'
print(id(s))

t = s
print(id(t))

id(a)의 값이 id(b)의 값과 동일함을 확인할 수 있다. 즉, a가 가리키는 대상과 b가 가리키는 대상이 동일하다는 것을 알수 있다.

리스트를 변수에 넣고 복사하고자 할 때

1. [:] 이용

a = [1, 2, 3]
print(id(a))

# call by reference
b = a
print(id(b))

# 내용 복사
c = a[:]
print(id(c))

s = 'hello'
print(id(s))

t = s
print(id(t))

위의 예에서 볼 수 있듯이 a 리스트 값을 바꾸더라도 b 리스트에는 영향을 끼치지 않는다.

2. copy 모듈 이용

변수를 만드는 여러 가지 방법

자바에서 리턴값을 하나만 받을 수 있었는데 비해 파이썬에선 튜플 리턴값을 여러개 받아 올 수 있게 된다.

a, b = ('python', 'life')

print(a)
print(b)

a, b = ('python', 'life')
[c, d] = ['python', 'life']
print(a)
print(b)
print(c)
print(d)

치환

a, b = ('python', 'life')
[c, d] = ['python', 'life']
print(a)
print(b)
print(c)
print(d)

e = 3
f = 4
e, f = f, e

print(e)
print(f)

 

반응형

댓글