- 파이썬에서 나눗셈을 실시
- / : 소수점까지 모두 표현
- //: 정수 부분만 표현, [int(a/b)]와 같음
- divmod(5,3) : 몫과 나머지를 동시에 구해줌 ->(1, 2)
print문을 이용해 가장 쉽게 값을 출력하는 방법은 콤마로 구분하는 것이다. 이 경우 한칸 공백이 디폴트로 설정되어 있으며, 그대로 출력하면 띄어쓰기로 값을 구분해준다.
print('A1', 'B1')
-> A1 B1
# sep 파라미터로 구분자를 콤마로 지정, 이 경우 공백을 따로 설정하지 않으면 공백은 없다.
print('A1', 'B1', sep=',')
-> A1,B1
# 줄바꿈 없애기
print('aa', end = ' ')
print('bb')
-> aa bb
# 리스트 출력
a=['A', 'B']
print(' '.join(a))
-> A B
idx=1
fruit 'Apple'
print(f'{idx+1}: {fruit}')
-> 2: Apple
# format 사용
print('{}: {}'.format(idx+1. fruit))
> 2: Apple
문자열 자료형은 자체적으로 함수를 가지고 있다. 이들 함수를 다른 말로 문자열 내장 함수라 한다. 이 내장 함수를 사용하려면 문자열 변수 이름 뒤에 ‘.’를 붙인 다음에 함수 이름을 써주면 된다.
>>> a = "hobby"
>>> a.count('b')
2
>>> a = "Python is the best choice"
>>> a.find('b')
14
>>> a.find('k')
-1
>>> a = "Life is too short"
>>> a.index('t')
8
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> ",".join('abcd')
'a,b,c,d'
>>> ",".join(['a', 'b', 'c', 'd'])
'a,b,c,d'
>>> a = "hi"
>>> a.upper()
'HI'
>>> a = "HI"
>>> a.lower()
'hi'
# 왼쪽 공백 지우기(lstrip)
>>> a = " hi "
>>> a.lstrip()
'hi '
- 문자열 중 가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다. lstrip에서 l은 left를 의미한다.
# 오른쪽 공백 지우기(rstrip)
>>> a= " hi "
>>> a.rstrip()
' hi'
- 문자열 중 가장 오른쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다. rstrip에서 r는 right를 의미한다.
# 양쪽 공백 지우기(strip)
>>> a = " hi "
>>> a.strip()
'hi'
- 문자열 양쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다.
>>> a = " aaaaaaaaaahioaaa"
>>> a.strip('a')
'hio'
>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'
replace(바뀌게 될 문자열, 바꿀 문자열)처럼 사용해서 문자열 안의 특정한 값을 다른 값으로 치환해 준다.
>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> b = "a:b:c:d"
>>> b.split(':')
['a', 'b', 'c', 'd']
파이썬의 리스트는 입력 순서가 유지되며, 내부적으로 동적 배열로 구현되어 있어 삽입/삭제가 가능한 자료구조이다.
>>> a = [1, 2, 3]
>>> del a[1]
>>> a
[1, 3]
index(x) 함수는 리스트에 x 값이 있으면 x의 인덱스 값을 리턴한다.
>>> a = [1,2,3]
>>> a.index(3)
2
>>> a.index(1)
0
insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다. 파이썬은 숫자를 0부터 센다.
>>> a = [1, 2, 3]
>>> a.insert(0, 4)
>>> a
[4, 1, 2, 3]
remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수이다.
>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)
>>> a
[1, 2, 1, 2, 3]
count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 리턴하는 함수이다.
>>> a = [1,2,3,1]
>>> a.count(1)
2
파이썬은 map, filter와 같은 함수형 기능을 지우너하며 람다 표현식도 지원한다.
list(map(lambda x:x+10, [1,2,3]))
-> [11,12,13]
# 홀수인 경우 2를 곱해서 출력하라
# 리스트 컴프리헨션
[n*2 for n in range(1,10+1) if n%2 ==1]
-> [2,6,10,14,18]
# 일반 식
a=[]
for n in range(1,10+1):
if n%2 ==1:
a.append(n*2)
# 딕션너리도 가능
a={}
for key, value in original.items():
a[key]=value
# 같은 식 다른표현
a = {key: value for key, value in original.items()}
enumerate()는 열거하다는 뜻의 함수로 여러가지 자료형(list, set, tuple)을 인덱스를 포함한 enumerate 객체로 리턴한다.
a=[1,2,3,43,10]
list(enumerate(a))
-> [(0,1), (1,2), (2,3), (3, 43), (4, 10)]
# 리스트 값과 인덱스와 모두 출력
i=0
for v in a:
print(i, v)
i+=1
------------------------------
for i, n in enumerate(a)
print(i, v)
딕셔너리는 중괄호 { }로 선언하며 '키:값'의 형태를 쉼표(,)로 연결해서 만듭니다. 키는 문자열, 숫자, 불 등으로 선언할 수 있습니다. 딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.
# print(dictionary_a["name"])
# print(dictionary_a["gender"])
# 딕셔너리를 선언합니다.
dictionary = {
"name" : "홍길동",
"gender" : "",
"ability" : ["축구", "공부", "연설", "원활한인간관계"],
"nation" : "한국",
}
print("name : {}".format(dictionary["name"]))
print("gender : {}".format(dictionary["gender"]))
print("ability : {}".format(dictionary["ability"]))
print("nation : {}".format(dictionary["nation"]))
print()
# 값 변경
dictionary["name"] = "각시탈"
print("name : {}".format(dictionary["name"]))
# 값이 리스트일 때는 리스트 안의 특정값을 접근해서 출력할 수도 있습니다.
print("ability {} : {}".format(0, dictionary["ability"][0]))
print("ability {} : {}".format(1, dictionary["ability"][1]))
print("ability {} : {}".format(2, dictionary["ability"][2]))
print("ability {} : {}".format(3, dictionary["ability"][3]))
파이썬의 내장 자료구조인 사전(dictionary)를 사용하다 보면 어떤 키(key)에 대한 값(value)이 없는 경우에 대한 처리를 해야하는 경우가 자주 발생한다. 이러한 경우 일반적으로 어떻게 처리를 하는지 살펴볼 것이다.
아래 코드는 주어진 단어에 들어있는 각 알파벳 글자의 수를 세어서 사전에 저장해주는 함수이다. 여러 방식으로 문제를 해결해볼 것이다.
def countLetters(word):
counter = {}
for letter in word:
if letter not in counter:
counter[letter] = 0
counter[letter] += 1
return counter
위와 같은 if 조건절을 피할 수 있도록 파이썬의 사전(dictionary) 자료구조는 setdefault 함수를 제공한다. 첫번째 인자로 키(key)값, 두번째 인자로 기본값(default value)를 넘긴다.
def countLetters(word):
counter = {}
for letter in word:
counter.setdefault(letter, 0)
counter[letter] += 1
return counter
파이썬의 내장 모듈인 collections의 defaultdict 클래스의 생성자로 기본값을 생성해주는 함수를 넘기면, 모든 키에 대해서 값이 없는 경우 자동으로 생성자의 인자로 넘어온 함수를 호출하여 그 결과값으로 설정해준다.
먼저, collections 모듈의 defaultdict 클래스는 다음과 같이 임포트해야 합니다.
from collections import defaultdict
def countLetters(word):
counter = defaultdict(int)
for letter in word:
counter[letter] += 1
return counter
from collections import defaultdict
def countLetters(word):
counter = defaultdict(lambda: 0)
for letter in word:
counter[letter] += 1
return counter
집합에 관련된 것을 처리 하기 위해 만들어진 자료형이다. set 키워드를 사용하거나 중괄호를 이용해서 표현할 수 있다.
# 세개 다 같은 집합을 만듭니다.
s1 = set({1, 2, 3})
s2 = set([1, 2, 3])
s3 = {1, 2, 3}
->print(s)
{1, 2, 3}
비어있는 집합을 만들기 위해서는 아래와 같이 사용한다.
s4 = set()
리스트나 튜플은 순서가 있기(ordered) 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 set 자료형은 순서가 없기(unordered) 때문에 인덱싱으로 값을 얻을 수 없다.
# 값 1개 추가하기(add)
이미 만들어진 set 자료형에 값을 추가할 수 있다. 1개의 값만 추가(add)할 경우에는 다음과 같이 한다.
s1 = set([1, 2, 3])
s1.add(4)
-> s1
{1, 2, 3, 4}
------------------------------------------
# 값 여러 개 추가하기(update)
여러 개의 값을 한꺼번에 추가(update)할 때는 다음과 같이 하면 된다.
s1 = set([1, 2, 3])
s1.update([4, 5, 6])
-> s1
{1, 2, 3, 4, 5, 6}
s = {1, 2, 3}
print(f'set : {s}')
s.update({'a', 'b', 'c'})
print(f'set : {s}')
s.update([1, 12, 13])
print(f'set : {s}')
->
set : {1, 2, 3}
set : {1, 2, 3, 'b', 'a', 'c'} 순서의미가 없음
set : {1, 2, 13, 3, 'b', 12, 'a', 'c'}
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])
- 교집합
>>> s1 & s2
{4, 5, 6}
"&" 기호를 이용하면 교집합을 간단히 구할 수 있다.
>>> s1.intersection(s2)
{4, 5, 6}
s2.intersection(s1)을 사용해도 결과는 같다.
- 합집합
# 중복해서 포함된 값은 한 개씩만 표현
>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
# s2.union(s1)을 사용해도 동일
- 차집합
>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}
>>> s1.difference(s2)
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}
# 특정 값 제거하기(remove)
- set 내부에 값이 있으면 삭제
- set 내부에 값이 없으면 오류
s = {'kim', 'lee', 'park', 2, 3, 4}
print(f'집합 : {s}')
s.remove("kim")
print(f'집합 : {s}')
# 에러 발생
# s.remove("kim")
# print(f'집합 : {s}')
-------------------------------------
# set discard - 특정 요소 안전하게 제거
- 집합 내부에 값이 있으면 삭제.
- 집합 내주에 값이 없으면 아무일도 일어나지 않음.
s = {'kim', 'lee', 'park', 2, 3, 4}
print(f'집합 : {s}')
s.discard("lee")
print(f'집합 : {s}')
s.discard("lee")
print(f'집합 : {s}')
->
{'kim', 'lee', 'park', 2, 3, 4}
{'kim', 'park', 2, 3, 4}
{'kim', 'park', 2, 3, 4}