문자열(str) 자료형
“string object”- 표기법 ” ” 혹은 ‘ ’로 감싸기
- immutable 원소의 추가/삭제 혹은 값이 변경될 수 없음
- 원소의 자료형 임의의 자료형(아무거나)의 원소를 저장할 수 있음
- 인덱스(index) 정수로 원소의 순서를 나타냄
문자열 만들기
- 큰따옴표(”)로 양쪽 둘러싸기
print("Hello DGroid") print("This isn't Error.") # 작은따옴표가 큰따옴표안에 있는 경우 print("This is " Error.") # 큰따옴표가 큰따옴표안에 있는 경우
- 작은따옴표(’)로 양쪽 둘러싸기
print('Hello DGroid') print('This isn"t Error.') # 큰따옴표가 작은따옴표안에 있는 경우 print('This is ' Error.') # 작은따옴표가 작은따옴표안에 있는 경우
- 큰따옴표 3개 연속(”””)으로 양쪽 둘러싸기
multiline = """Let's go to library to study Python """ print(multiline)
- 작은따옴표 3개 연속(’’’)으로 양쪽 둘러싸기
multiline = '''Let's go to library to study Python ''' print(multiline)
이스케이프 코드
이스케이프 코드란 프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 “문자 조합”
쓰는 이유
이걸 사용하면 줄바꿈을 위해 따옴표 3개를 안써도
\n으로 표현 가능!큰따옴표안 큰따옴표 → 에러 안내고
\”로 표현 가능!작은따옴표안 작은따옴표 → 에러 안내고
\’로 표현 가능!
# 예시 print("I'll show you \n \"escape code\"") print('\t \'escape code\'의 형태는 \\뒤에 어떤 문자를 붙여서 사용한다.')
문자열 인덱싱, 슬라이싱, 연산


문자열 포매팅은 중요한 내용이지만 나중에 심화로 시간이 남는다면 다루도록 하겠습니다.
궁금하다면 점프 투 파이썬(문자열 포매팅)에서 자습 바랍니다!
이 외에도 문자열을 다룰때 유용한 함수들이 점프 투 파이썬(문자열 관련 함수들)에 소개되어있는데, 해당 내용은 대충 어떤 함수들이 있는지만 알고 용법은 그때그때 구글링하는것을 추천하므로 넘어가도록 하겠습니다.

리스트(list) 자료형
리스트명 = [요소1, 요소2, 요소3, ...]- 표기법 [ ]로 감싸주고 각 요소는 ,로 구분
- mutable 원소의 추가/삭제 혹은 값이 변경될 수 있음
- 원소의 자료형 임의의 자료형(아무거나)의 원소를 저장할 수 있음
- 인덱스(index) 정수로 원소의 순서를 나타냄
리스트 만들기
# 다양한 리스트 a = [] # 빈 리스트 만들기 1 a = list() # 빈 리스트 만들기 2 b = [1, 2, 3] c = ['Life', 'is'] d = ['Life', 5] e = [1, ['Life', 4]]
리스트 인덱싱, 슬라이싱, 연산

리스트에서의
len()은 원소의 개수를 의미한다.+나 *의 연산은 문자열에서의 연산과 동일한 결과를 보여준다.
여기 소개된 대부분의 연산이 다른 시퀀스(str, tuple)에도 적용된다.

s[i:j:k] = 간격이 있는 슬라이싱
→ i에서 j까지 k의 간격으로! (물론 j 미포함)

뒤에서부터 원소를 세고 싶다면 마이너스 인덱스 사용하자
여기서 껍데기 복사란, 값만 복사해오고 원본에는 영향을 안 미친다는 뜻.
![[껍데기 복사에 대한 이해를 돕기 위한 코드]
껍데기 복사본 = t5
원본 = t3](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fc0389671-d63b-4c5d-a65d-5113fb1666a2%2F7392cca7-b13b-415c-9682-d2211fab5abb%2FUntitled.png?table=block&id=c213b041-2133-439b-b1c6-4579921705d1&cache=v2)

주의: 연산 TypeError 발생
a = [1, 2, 3] 을 정의하고, a[2] + “hi”를 입력하면 무엇이 나올까?
3hi가 아닌 TypeError가 뜬다. a[2]는 int type이고 “hi”는 str type이기 때문에 다른 type간의 연산은 불가능하다는 의미이다.
그럼 에러를 피하고 3hi를 만들고 싶다면 a[2] 를 str type으로 형변환을 해준뒤 더해주어야 할 것이다 → str(a[2]) + “hi”리스트 추가, 수정, 삭제
- 추가
append()list에 원소를 하나씩 추가extend()한 list에 다른 list의 모든 원소를 추가 t3 = t1 + t2와 동일

- 수정

- 삭제

문자열때와 동일하게, 이 외에도 리스트를 다룰때 유용한 함수들이 점프 투 파이썬(리스트 관련 함수들)에 소개되어있는데, 해당 내용은 대충 어떤 함수들이 있는지만 알고 용법은 그때그때 구글링하는것을 추천하므로 넘어가도록 하겠습니다.
append()

튜플(tuple) 자료형
튜플명 = (요소1,)튜플명 = (요소1, 요소2, 요소3, ...)- 표기법 ( )로 감싸주고 각 요소는 ,로 구분 정의할 때 ( )는 생략 가능하고, 원소가 하나일때는 컴마 ,를 뒤에 추가해야함
- immutable 원소의 추가/삭제 혹은 값이 변경될 수 없음
- 원소의 자료형 임의의 자료형(아무거나)의 원소를 저장할 수 있음
- 인덱스(index) 정수로 원소의 순서를 나타냄
튜플 만들기

t1, t6: 빈 튜플 만들기
t2: 원소가 하나인 튜플 만들기
t3: 원소가 여러개인 튜플 만들기
t4: 괄호 생략해도 튜플 정의 가능
t5: 튜플 안에 튜플 가능
튜플 인덱싱, 슬라이싱, 연산
→ 리스트와 완벽히 동일하다
튜플 추가, 수정, 삭제
→ immutable 하므로 요솟값을 변경할 수 없어서 불가능!
딕셔너리(dictionary) 자료형
딕셔너리명 = {key1:value1, key2:value2, key3:value3, ...}- 표기법
{ }로 감싸주고 각 요소는 ,로 구분
각각의 요소는
Key: Value형태임
- mutable 원소의 추가/삭제 혹은 값이 변경될 수 있음
- 원소의 자료형 [Key] immutable인 type (bool, int, float, tuple, str) 만 가능 [Value] 임의의 자료형(아무거나)의 원소를 저장할 수 있음
- 인덱스(index) 요소간 순서가 없음 key값을 기존 인덱스 자리에 넣으면 value가 나옴
딕셔너리 만들기


딕셔너리 추가, 수정, 삭제
- 추가
a[new_k] = new_va.update({new_k : new_v})
추가하고싶은 key와 value를 각각
new_k, new_v라고 하자a = {1: 'a'} a[2] = 'b' a.update({3: 'c'}) print(a) >> a는 {1: 'a', 2: 'b', 3: 'c'}가 출력됨.
- 수정
a[org_k] = new_va.update({org_k : new_v})
수정이란 기존 key가 있을 때 해당 value를 바꾸고 싶다고 정의하자
기존 key와 새로운 value를 각각
org_k, new_v라고 하면
추가할 때와 동일한 방식으로 수정할 수 있다a = {1: 'a', 2: 'b', 3: 'c'} a[2] = 'change' a.update({3: 'changeee'}) print(a) >> a는 {1: 'a', 2: 'change', 3: 'changeee'}가 출력됨.
이를 다시 말하면, 한 딕셔너리 안에서 같은 key는 있을 수 없다!
→ 수정을 추가라고 다시 보자면, 똑같은 key (key가 2인) 를 가지는 value (’change’) 를 새로 딕셔너리에 추가한 것이다. 그런데 기존에 있던 key가 2인 것의 value인 ‘b’는 사라졌으므로, 한 딕셔너리안에서 {2: ‘b’, 2: ’change’}와 같이는 존재할 수 없음
- 삭제
del a[key]
del 함수를 사용해서 위와 같이 입력하면 지정한 key에 해당하는 {key : value}쌍이 삭제된다.a.clear()
딕셔너리의 모든 아이템을 지움
딕셔너리 관련 함수들
*여기서 a는 임의의 딕셔너리 명이고, key 또한 임의의 key값, value 또한 임의의 value값이다.
a.keys() key만 모아보기a.values() value만 모아보기a.items() key, value 쌍 얻기주의: 위 3개 모두 dict_뭐시기 객체로 반환해준다. list형의 반환값이 필요하다면 list()로 감싸서 형변환 해주자.
a.get(key) key로 value 얻기. a[key]와 동일한 결과!딕셔너리에 존재하지 않는 key를 non_key라고 하면,
a[non-key]는 오류가 나고 a.get(non_key)는 None을 반환해준다.
None을 반환해준다 ⇒ 오류가 안난다~!a.get(non_key, def_v)로 쓰면 non_key가 딕셔너리에 존재하지 않는 key일 경우, None이 아니라 def_v가 반환된다.key in a 해당 key가 딕셔너리 안에 있는지 조사하기. True 또는 False가 반환된다집합(set) 자료형
집합명 = set([요소1, 요소2, 요소3, ...])집합명 = {요소1, 요소2, 요소3, ...}- 표기법 { }로 감싸주고 각 요소는 ,로 구분
- mutable 원소의 추가/삭제 혹은 값이 변경될 수 있음
- 원소의 자료형 immutable 자료형 (bool, int, float, tuple, str) 만 가능 일반적으로 문자열 혹은 정수가 많이 사용됨
- 인덱스(index) 요소간 순서가 없음
- 중복을 허용하지 않음 → set은 자료형의 중복을 제거하기 위한 필터로 사용되기도.
집합 만들기

집합 추가, 수정, 삭제
- 추가
s1.add(요소) 1개만 추가s1.update([요소1, 요소2, 요소3, …]) 여러개 요소 추가- 삭제
s1.remove(요소) 해당 요소 삭제. → 없는 요소 삭제해달라고하면 Error 발생s1.clear() 집합 요소 다 지우고 비우기
요소 in 집합명으로 해당 요소가 있는지 여부 확인 가능하다교집합, 합집합, 차집합
두 집합 s1과 s2가 있다고 했을때, 다음과 같이 연산이 가능하다
- 교집합
s1 & s2s1.intersection(s2)s2.intersection(s1)과 동일
- 합집합
s1 | s2s1.union(s2)s2.union(s1)과 동일
- 차집합
s1 - s2차집합의 정의상,s2 - s1과 같지 않음s1.difference(s2)차집합의 정의상,s2.difference(s1)과 같지 않음
불(bool) 자료형
참, 거짓을 나타내는 자료형이다
True(참) 혹은 False(거짓)만을 불 자료형으로 가진다주의: 표기법
true 혹은 TRUE와 같이 적으면 안되고 무조건 True로 적어야한다
False도 마찬가지로 첫 문자만 항상 대문자로 사용해야한다.

불 자료형은 조건문의 반환값으로도 사용된다.
1 == 1 >> True가 반환된다. 2 < 1 >> False가 반환된다.
자료형의 참과 거짓
값 | True or False |
“python” | True |
“” | False |
[1, 2, 3] | True |
[ ] | False |
(1, 2, 3) | True |
( ) | False |
1 | True |
0 | False |
None | False |
위의 표를 보고 헷갈릴 필요 없다. 비어있으면 False임을 알 수 있다!
나중에 조건문에서 사용하기 좋다.
간단히 1은 True, 0은 False라고 배우는데. 0만 False고 나머지 숫자는 True라고 알고있자.
bool()함수를 사용하면 자료형의 참과 거짓을 보다 정확하게 식별할 수 있다.bool([1, 2, 3]) >> True 반환 bool([]) >> False 반환 bool(0) >> False 반환 bool(3) >> True 반환
예제
예제 사용법
1. 예제는 문제와 조건을 읽어보고 코드를 따로 짜보며 생각해본다.
2. 코드를 완성했으면 문제 토글을 열어서 답을 확인한다.
3. 자신이 짠 코드와 비교하며 이해한다.
리스트 문제 [조건] 빈 리스트 만들고 원소(1, 5, 7, 3) 하나씩 추가하기 원소 하나씩 찾기 3번째를 4로 수정하기 리스트 슬라이싱(2번째~마지막) 해와서 새로운 변수에 저장하기 위에서 만든 리스트 변수에 요소 추가(”hello”)하기 리스트 원래거랑 다시 더해주기
# 빈 리스트 만들고 원소(1, 5, 7, 3) 하나씩 추가하기 a = [] a.append(1) a.append(5) a.append(7) a.append(3) # 원소 하나씩 찾기 print(a[0]) print(a[1]) print(a[2]) print(a[3]) # 3번째를 4로 수정하기 a[2] = 4 # 리스트 슬라이싱(2번째~마지막) 해와서 새로운 변수에 저장하기 b = a[1:] # 위에서 만든 리스트 변수에 요소 추가(”hello”)하기 b.append("hello") # 리스트 원래거랑 다시 더해주기 a += b
결국 최종적으로 구할 수 있는 a는 [1, 5, 4, 3, 5, 4, 3, ‘hello’]이다.
튜플 문제 [조건] 빈 튜플 만들고 원소(4, 8, 16) 있는 튜플 만들기 3번째 원소 찾기 튜플 2배로 만들기 튜플 길이가 첫번째 문제에서 만들었던 최종 리스트의 길이와 같은지 bool 확인하기
# 리스트 문제에서 만들었던 최종 리스트 a = [1, 5, 4, 3, 5, 4, 3, 'hello'] # 빈 튜플 만들고 원소(4, 8, 16) 있는 튜플 만들기 t = () t = (4, 8, 16) # 3번째 원소 찾기 print(t[2]) # 튜플 2배로 만들기 t *= 2 # 튜플 길이가 첫번째 문제에서 만들었던 최종 리스트의 길이와 같은지 bool 확인하기 len(a) == len(t)
딕셔너리 문제 해당 문제는 조건에 표를 표시해야해서 조건이 토글을 열어야 있습니다
[조건]
빈 딕셔너리 만들고
다음 표에 따라 딕셔너리 하나씩 채우기
key type | key | value type | value |
str | a | str | apple |
str | b | str | banana |
int | 51 | list | 7, 8, 9 |
tuple | 4, 5 | tuple | 50 |
51을 key로 갖는 value 찾기 → 7, 8, 9가 들어있는 리스트!
7, 8, 9가 들어있는 리스트 맨 뒤에 10 추가하기
key들 리스트로 형변환해서 출력하기
정답(4/10 공개)
# 빈 딕셔너리 만들고 표에 따라 딕셔너리 하나씩 채우기 d = {} d['a'] = 'apple' d['b'] = 'banana' d[51] = [7, 8, 9] d[(4, 5)] = (50,) # 51을 key로 갖는 value 찾기 print(d[51]) # 위에서 찾은 리스트 맨 뒤에 10 추가하기 d[51].append(10) print(d[51]) # key들 리스트로 형변환해서 출력하기 print(list(d.keys()))
집합 문제 [조건] 빈 집합자료형을 2개 만들고 한 집합에는 “Let’s go to mississippi” 다른 집합에는 “No I don’t want to go there”를 넣는다 두 집합의 교집합 구하기 첫번째 리스트 문제에서 만든 리스트를 집합자료형으로 만들기, 거기서 원소 ‘3’ 제거하기 (원소 3개 제거하라는거 아닙니다ㅎㅎ..)
# 빈 집합자료형을 2개 만들기 s1 = set() s2 = set() # 한 집합에는 “Let’s go to mississippi” # 다른 집합에는 “No I don’t want to go there” 를 넣는데, # 각 문자열마다 떨어져서 들어갈 수 있도록(예시: ‘L’, ‘e’, ‘t’, …) 넣어주기 s1.update("Let's go to mississippi") s2.update("No I don’t want to go there") # 두 집합의 교집합 구하기 print(s1 & s2) # 첫번째 리스트 문제에서 만든 리스트(그냥 가져오겠음..)를 집합자료형으로 만들기 # 첫번째 문제에서 이어서 풀고 있다면 굳이 새로 이렇게 리스트 만들 필요없음 a = [1, 5, 4, 3, 5, 4, 3, 'Hello'] a = set(a) print(a) # 거기서 원소 '3' 제거하기 (원소 3개 제거하라는거 아닙니다ㅎㅎ..) a.remove(3) print(a)
