티스토리 뷰
문자열 슬라이싱
기본형태
a[start:end:step]
start : 슬라이싱을 시작할 시작위치
end : 슬라이싱을 끝낼 위치로 end는 포함하지 않는다.
step : 보폭, 옵션이다.
a = ['a', 'b', 'c', 'd', 'e']
// Index References
-------------------------------
| a | b | c | d | e |
-------------------------------
| 0 | 1 | 2 | 3 | 4 | // 양수의 경우
-------------------------------
| -5 | -4 | -3 | -2 | -1 | // 음수의 경우
-------------------------------
리스트(list)
순서가 있는, 다른 자료형들의 모임
자바의 배열과 리스트를 합쳐놓은 느낌이다?
덧붙이기
a = [1, 2, 3]
a.append(5)
print(a) # [1, 2, 3, 5]
a.append([1, 2])
print(a) # [1, 2, 3, 5, [1, 2]]
# 더하기 연산과 비교!
a += [2, 7]
print(a) # [1, 2, 3, 5, [1, 2], 2, 7]
정렬하기
a = [2, 5, 3]
a.sort()
print(a) # [2, 3, 5]
a.sort(reverse=True)
print(a) # [5, 3, 2]
요소가 리스트 안에 있는지 알아보기
a = [2, 1, 4, "2", 6]
print(1 in a) # True
print("1" in a) # False
print(0 not in a) # True
딕셔너리 (dictionary)
딕셔너리는 key, value의 쌍으로 이루어진 자료의 모임이다.
자바의 해시느낌이다?
person = {"name":"Bob", "age": 21}
print(person["name"])
# 빈 딕셔너리 만들기
a = {}
a = dict()
딕셔너리의 요소에는 순서가 없기 때문에 인덱싱을 사용할 수 없다.
person = {"name":"Bob", "age": 21}
print(person[0]) # 0이라는 key가 없으므로 KeyError 발생!
딕셔너리의 값을 업데이트하거나 새로운 쌍의 자료를 넣을 수 있다.
person = {"name":"Bob", "age": 21}
person["name"] = "Robert"
print(person) # {'name': 'Robert', 'age': 21}
person["height"] = 174.8
print(person) # {'name': 'Robert', 'age': 21, 'height': 174.8}
딕셔너리의 value로는 아무 자료형이나 쓸 수 있다.
person = {"name":"Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}
print(person["scores"]) # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"]) # 92
딕셔너리 안에 해당 키가 존재하는지 알고 싶을때는 in을 사용한다.
person = {"name":"Bob", "age": 21}
print("name" in person) # True
print("email" in person) # False
print("phone" not in person) # True
리스트 + 딕셔너리의 조합
people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]
# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'
person = {'name': 'john', 'age': 7}
people.append(person)
# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은? 'john'
튜플 (tuple)
튜플은 리스트와 비슷하지만 불변인 자료형이다. 마찬가지로 순서가 존재한다.
a = (1,2,3)
print(a[0])
예를 들어 아래와 같은 작업이 불가능하다.
a = (1,2,3)
a[0] = 99
딕셔너리 대신 리스트와 튜플로 딕셔너리 비슷하게 만들어 사용할때 많이 사용한다.
a_dict = [('bob','24'),('john','29'),('smith','30')]
집합 (set)
집합은 중복을 허용하지 않고 순서가 없다는 것이 특징이다.
a = [1,2,3,4,5,3,4,2,1,2,4,2,3,1,4,1,5,1]
a_set = set(a)
print(a_set) # {1, 2, 3, 4, 5}
교집합/합집합/차집합도 사용할 수 있다.
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
print(s1 & s2) # {4, 5, 6}
print(s1 | s2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(s1 - s2) # {1, 2, 3}
print(s2 - s1) # {8, 9, 7}
값 추가하기
s1 = set([1, 2, 3])
s1.add(4) # 1개 추가하기
print(s1) # {1, 2, 3, 4}
s1.update([4, 5, 6]) # 여러개 추가하기
print(s1) # {1, 2, 3, 4, 5, 6}
f-string
python 3.6부터 지원되는 기능으로 문자열을 출력할때 훨씬 보기 편하게 만들어준다.
scores = [
{'name':'영수','score':70},
{'name':'영희','score':65},
{'name':'기찬','score':75},
{'name':'희수','score':23},
{'name':'서경','score':99},
{'name':'미주','score':100},
{'name':'병태','score':32}
]
for s in scores:
name = s['name']
score = str(s['score'])
print(name+'는 '+score+'점 입니다')
# 위 코드를 f-string을 사용하면
for s in scores:
name = s['name']
score = str(s['score'])
print(f'{name}은 {score}점입니다')
앞에 f를 붙이고 {변수명}형태로 작성하면 된다.
if문
기존 if문
num = 3
if num%2 == 0:
result = "짝수"
else:
result = "홀수"
print(f"{num}은 {result}입니다.")
삼항연산자 if
num = 3
result = "짝수" if num%2 == 0 else "홀수"
print(f"{num}은 {result}입니다.")
(참일때 값) if (조건) else (거짓일 때 값) 으로 항이 3개라 삼항 연산자 이다.
for문
for in range() 함수
순회할 횟수가 정해져 있을때 사용
for i in range(5):
print(i) # 0,1,2,3,4
enumerate 함수
리스트가 있는 경우 순서와 리스트의 값을 전달하는 기능
for i, name in enumerate(['body', 'foo', 'bar']):
print(i, name)
# 0 body
# 1 foo
# 2 bar
기존 for문
a_list = [1, 3, 2, 5, 1, 2]
b_list = []
for a in a_list:
b_list.append(a*2)
print(b_list)
한줄 for문
a_list = [1, 3, 2, 5, 1, 2]
b_list = [a*2 for a in a_list]
print(b_list)