개발공부/SK Networks Family AI bootcamp 강의노트

3일차 [파이썬 기초(자료구조-사칙연산, escaping, 형변환,문자열)]

HyunJung_Jo 2025. 1. 9. 15:03

문제를 인식하고 해결방법을 설계(디자인)하고 설계도대로 짜는 사람이 개발자이다!

화재,지진까지 감안하여 건물을 짓는 마음가짐으로 개발해야 한다!

1. 사칙연산 

a,b=3,4

더하기 a+b=7

곱하기 a*b=12

제곱     a**b=81

나눗셈 a/b=3/4

나머지 a%b=3

몫        a//b=0

 

2. str escaping

"I'm a student"
  • str 에서는 작은따옴표로 감쌀 수 있지만, 부득히하게 '가 str 내부에서 표현해야 한다면 쌍따옴표가 쓰일 수 있다.

3. data type 및 변환 (float, str)

a=1.3 (float)
len(a) # error! float는 사이즈가 없음

 

a=3.0
b=str(a*3) # 숫자를 문자로 변환, 다른 변수에 할당하여 재사용, str(a*3) -> str(3.0*3) ->'9.0'
float(b) # 문자열을 숫자로 변환, 9.0
float('Hello') # error!
int('1.0') # error!

4. 문자열 인덱싱

"Hello World"

H  e   l   l   o     W  o  r  l  d
0  1   2   3   4  5  6  7  8  9 10
 
H   e   l   l  o     W  o  r  l  d
-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
슬라이싱은 문자열, 리스트, 튜플 등 시퀀스 자료형에서 부분을 추출하는 방법입니다. 슬라이싱의 기본 구문은 `sequence[start:stop:step]`입니다.

- `start`: 슬라이스의 시작 인덱스 (포함, 기본값은 0)
- `stop`: 슬라이스의 끝 인덱스 (포함되지 않음, 기본값은 시퀀스의 길이)
- `step`: 슬라이스의 간격 (기본값은 1)

 

text = "Hello World"

# "Hello" 추출
slice1 = text[0:5]  # "Hello"

# "World" 추출
slice2 = text[6:11]  # "World"

# "HloWrd" 추출 (간격 2)
slice3 = text[0:11:2]  # "HloWrd"

# "World" 추출 (음수 인덱스 사용)
slice4 = text[-5:]  # "World"

5. 문자열 f string

food1='수박'
food2='아이스크림'
food3='떡볶이'

# 나는 수박을 먹었습니다.
f"나는 {food1}를 먹었습니다."
"나는 {food} 먹었습니다.".format(food=food1)

# 나는 수박,아이스크림,떡볶이를 먹었습니다.
"나는 {0}{1}{2} 먹었습니다."format(food1,food2,food3)
# 0,1,2가 인덱스!

 

6. 숫자,문자 formatting

print("I eat %s apples." % "five") # I eat five apples.
print("I eat %d apples." % 3) # I eat 3 apples.
print("I ate %d rotten apples. so I was sick for %s days." % (5, "three")) 
# I ate 5 rotten apples. so I was sick for three days.
pi=3.141592
print("파이는 %.2f" % pi) # 파이는 3.14 # 소수점 2번째까지 표기

7. 문자열 연산 및 함수

  • count, find
hw = "Hello, World!"

# 문자 개수 세기
hw.count('o') # 2
hw.count(' ') # 1 , 빈 공간도 문자열이다!

# 해당 문자열 인덱스 (위치정보) 찾기
hw.find("H") # 0
hw.find("k") # -1 (찾는 문자가 없으면 -1 반환)
hw.find('h') # -1 (대소문자 구분)

 

  • 문자열끼리는 더하기만 된다!
h='Hello'
w ='world'
hw = h + ', ' + w + '!' # 'Hello world'
h * w # TypeError: can't multiply sequence by non-int of type 'str'
h -w # TypeError: unsupported operand type(s) for -: 'str' and 'str'
h / w # TypeError: unsupported operand type(s) for /: 'str' and 'str'

 

  • 문자열과 숫자는 곱하기만 됨
h*3 # 'HelloHelloHello'
h/3 # TypeError: unsupported operand type(s) for /: 'str' and 'int'
h+3 # TypeError: can only concatenate str (not "int") to str
h-3 # TypeError: unsupported operand type(s) for -: 'str' and 'int'

 

  • split
hw = "Hello, World!"
hw.split('o') # ['Hell', ', W', 'rld!'] (o를 기준으로 문자열을 나눔)

 

  • upper, lower
hw.upper() # 'HELLO, WORLD!'
hw.lower() # 'hello, world!'

 

  • strip
"Hello World" == "  Hello World  " # False
"Hello World" == "  Hello World  ".strip() # True # 문자열 앞뒤 공백 제거
"Hello World" == "  Hello World  ".lstrip() # True # 문자열 왼쪽 공백 제거
"Hello World" == "  Hello World  ".rstrip() # True # 문자열 오른쪽 공백 제거

 

  • replace
# replace(바꿀 문자열, 대상 문자열)
# 첫번째 인자의 데이터가 문자열에 있어야 함! 없으면 아무것도 반환하지 않음.
# 두번째 인자의 데이터로 첫번째 인자의 데이터를 대체함.
"Hello World".replace("World", "Python") # 'Hello Python'

 

 

8. 묶음/집합

  • 리스트: list : 인덱스로 데이터 식별, 수정 가능, 중복 없음
  • 튜플: tuple : 수정 불가
  • 딕셔너리 : dict : 키로 데이터 식별
  • 집합 : set: 중복 있음

8-1. list

  • slicing
lst=[1,2,3,4,5]
type(lst) # <class 'list'>
lst[0] # 1
lst[-1] # 5
lst[-1::-2] # [5, 3, 1]

 

a=[] # 빈 리스트
b=[1,2,3.14]
c=['Life','is']
e=[1,2,3,3.14,'a','b','c']
g=[1,2,3,['python','java','c++']]
c[0:2:5] # ['Life', 'is']
c[0:2:-5] # []
# [시작:끝:단위]
# 단위가 양수면, 끝>시작
# 단위가 음수면, 시작>끝
c[2:0:-5] # ['is']
e[2]*e[-3] # 'aaa
g[3][1] # 'java'
e[1]='b' # [1, 'b', 3, 3.14, 'a', 'b', 'c']
e[1:3]=[1,2] # [1, 1, 2, 3.14, 'a', 'b', 'c']
g[3][1]='c' # [1, 2, 3, ['python', 'c', 'c++']]

 

  • append, extend
# append(추가할 데이터) : 리스트의 맨 마지막에 데이터 추가
# extend(추가할 데이터) : 리스트의 맨 마지막에 리스트 형태로 데이터 추가
a=[1,2,3]
a.append(1) # [1, 2, 3, 1]
a.extend([2,3,4]) # [1, 2, 3, 1, 2, 3, 4]
a.append([2,3,4]) # [1, 2, 3, 1, 2, 3, 4, [2, 3, 4]]

a=[1,2,3]
a.extend([4,5,6]) # [1, 2, 3, 4, 5, 6]
# [1,2,3]+[4] -> [1,2,3,4]+[5] -> [1,2,3,4,5]+[6] -> [1,2,3,4,5,6]
  • sort(), reverse()
a=['b','c','g','a']
a.sort() # ['a', 'b', 'c', 'g']
a # ['a', 'b', 'c', 'g']
a.reverse()
a # ['g', 'c', 'b', 'a']
a.count('c') # 1

8-2. tuple

  • 수정 / 추가 불가
  • ex) 태어날 때부터 정해진 성별 같은 것. 
a = tuple()
b=()
c=(1)
d=(1,2)
e=(1,'a',2)
f=(1,'a',(1,2))

c=(1)
type(c) # int
g=(1,) # 콤마가 요소들을 구분하는 역할을 하기 때문에 콤마가 있어야 튜플로 인식
e+e # (1,'a',2,1,'a',2)
e*3 # (1,'a',2,1,'a',2,1,'a',2)
e+3 # TypeError: can only concatenate tuple (not "int") to tuple

 

8-3. dict

# tuple -> ()
# list -> []   
# dict -> {}
# set -> {} or set()

dic1=dict()
dic2={}
dic3 = {
    'key':'value',
    'name':'pey',
    'age':30,
    'phone':'010-1234-5678',
    "hobby":['soccer','baseball'],
    'address':{
        'city':'Seoul',
        'dong':'Gangnam'
    },
    'family':('mother','father')

}
dic3['name'] # 'pey'
dic3['phone'][-4:] # 5678
dic3.keys() # dict_keys(['key', 'name', 'age', 'phone', 'hobby', 'address', 'family'])
dic3.values() # dict_values(['value', 'pey', 30, '010-1234-5678', ['soccer', 'baseball'], {'city': 'Seoul', 'dong': 'Gangnam'}, ('mother', 'father')])  
dic3.items() # dict_items([('key', 'value'), ('name', 'pey'), ('age', 30), ('phone', '010-1234-5678'), ('hobby', ['soccer', 'baseball']), ('address', {'city': 'Seoul', 'dong': 'Gangnam'}), ('family', ('mother', 'father'))])

 

'name' in dic3 # True
# key가 존재하는지 확인
dic3.get("vacation","no vacation") # 'no vacation'
dic3.get("name","no name") # 'pey'

dic3['career'] = 'developer' # career라는 key에 developer라는 value 추가
del dic3['career'] # career key 삭제
 
dic3['age'] = 40 # age key의 value를 40으로 변경
dic3

 

8-4. 집합 set

  • list, tuple, dict 과 다르게 중복이 허용되지 않는다.
  • 순서가 없다.
  • 교집합 구하기 좋음
set([1,2,2,3,4,4,5]) # {1, 2, 3, 4, 5, 6, 7}

 

a={1,2,3,4,5}
b={3,4,5,6,7,8}
a&b # {3, 4, 5}
# Difference
# 순서 상관 있음.
difference = a - b
print("Difference (a - b):", difference)
a.difference(b)

# Symmetric Difference
symmetric_difference = a ^ b
print("Symmetric Difference (a ^ b):", symmetric_difference)
a.symmetric_diffence(b)

# Union
# 순서 상관 없음음
union = a | b
print("Union (a | b):", union)
a.union(b)

# Intersection
# 순서 상관 없음
intersection = a & b
print("Intersection (a & b):", intersection)
a.intersection(b)

# Subset

is_subset = a <= b
print("Is a subset of b:", is_subset)
a.issubset(b)

# Superset
is_superset = a >= b
print("Is a superset of b:", is_superset)

# Add an element
a.add(6)
print("Add 6 to a:", a)

# Remove an element

a.remove(6)
print("Remove 6 from a:", a)

# Check if an element is in the set
is_in_set = 3 in a
print("Is 3 in a:", is_in_set)

# Check if an element is not in the set
is_not_in_set = 10 not in a
print("Is 10 not in a:", is_not_in_set)