내일배움캠프/Python

[Python]튜플, 집합, f-string, try except

dydatablog 2024. 11. 22. 15:07

튜플(tuple) : 리스트와 비슷하지만 불변형인 자료

리스트의 경우 리스트를 추가하거나 변경하는 것이 가능하지만

a = ['사과','감','배'] #리스트는 '['를 사용하며 묶는다.
a[1] = '수박' #리스트 a의 1번째 원소를 수박으로 변경
print(a)

#결과 값: ['사과','수박','배']

 

튜플의 경우, 추가나 변경이 불가능 하다.

a = ('사과','감','배') #튜플은 '('을 사용
a[1] = '수박' 
print(a)

#결과 값: Error

 

주로 딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어서 사용한다.

people = [('bob','24'),('john','29'),('smith','30')]
#people의 모든 요소의 0번째는 이름이 나올 것이고, 1번째는 무조건 나이가 나온다.(괄호 안에 든 튜플은 불변형)

 


집합(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}
a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']

a_set = set(a)
b_set = set(b)

print(a_set & b_set)  # 교집합
print(a_set | b_set)  # 합집합
print(a_set - b_set)  # 차집합

f-string : 문자열 포매팅 ; 문자열에서 특정 부분만 바꾸고 싶을 때 사용한다.

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을 이용하면 간단하게 작성할 수 있다.

 

scores = [...] #위와 동일

for s in scores:
    name = s['name']
    score = str(s['score'])
    print(f'{name}은 {score}점입니다')

 


except 문 : 에러가 있어도 건너뛰게 할 수 있는 방법

#people 중에 20세 보다 큰 사람의 이름만 출력
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby'},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people:
    if person['age'] > 20:
        print (person['name'])

#결과 값 : Error (7행 bobby의 age 데이터가 없기 때문!)

 

이때, try except 구문을 이용하면 에러를 넘길 수 있다.

people = [...] #위와 동일

for person in people:
    try:
        if person['age'] > 20:
            print (person['name'])
    except:
        name = person['name']
        print(f'{name} - 에러입니다')
        
결과 값:
carry
ben
bobby - 에러입니다
red
queen

 

보통 서버에 문제가 있을 가능성이 있을 때 사용한다.

BUT! 너무 남용해버리면 결과값이 이상해지고 어떤 에러가 있는지 모르게 되어버리기 때문에 신중하게 사용하기!