튜플
튜플_이름=(항목1, 항목2, ...)
fruits=()
fruits=("apple", "banana", "grape")
result=fruits[1]
튜플은 변경 불가-리스트와의 차이점
괄호 없이 항목들을 쉼표로 분리해도 자동으로 튜플이 생성됨
fruits="apple", "banana", "grape"
⚠요소가 하나뿐인 튜플을 만들 때는 요소의 끝에 반드시 쉼표(,)를 추가하기
쉼표가 없으면 튜플이 아니라 수식이 됨
single_tupe=("apple",)
no_tuple=("apple") #단순 수식
튜플<->리스트
myList=[1,2,3,4]
myTuple=tuple(myList)
myTuple
>>>(1,2,3,4)
tuple()는 튜플을 생성하는 함수, 생성자 함수
반대로 튜플을 리스트로 바꾸려먼 list()함수 사용
튜플에서 요소를 삭제하는 것도 금지됨
튜플 연산들
🔑튜플이 숫자를 저장하고 있는 경우에 +=연산자 이용해서 다른 튜플 추가하는 것은 가능
이때 기존의 튜플이 변겨오디는 것이 아니고 새로운 튜플이 생성되어 반환됨
fruits=("apple", "banana", "grape")
fruits+=("pear", "kiwi")
fruits
>>>("apple", "banana", "grape", "pear", "kiwi")
⚡튜플 안에 변경 가능한 객체가 저장되어 있는 경우
튜플 자체는 변경 불가지만 튜플 안의 리스트는 변경 가능
student=("Kim", [3.1, 3.6, 4.0, 0.0])
student[1][3]=4.3
student
>>>("Kim", [3.1, 3.6, 4.0, 4.3])
+=연산자를 이용해서 튜플을 리스트에 추가하는 것은 가능
numbers=[10, 20, 30]
numbers+=(40, 50)
numbers
>>>[10, 20, 30, 40, 50]
튜플 패킹과 언패킹
🍋튜플 패킹(packing): 여러 개의 항목을 가지는 튜플 생성
여러 개의 데이터가 하나의 변수 안으로 압축되는 느낌을 주기 때문에 이렇게 부름
🍋튜플 언패킹(unpacking): 하나의 튜플 안에 저장되 데이터를 풀어서 개별 변수 안에 저장 가능
x=("apple", "banana", "grape") #튜플 패킹
(s1, s2, s3) = x #튜플 언패킹
서로 다른 자료형에 대해서도 패킹과 언패킹 가능
student=("Kim", [3.1, 3.6, 4.0, 4.0[)
name, grades = student
name
>>>Kim
grades
>>>[3.1, 3.6, 4.0, 0.0]
흔히 패킹과 언패킹을 이용하여 데이터의 순서를 바꾸기도 함
n1 = 10
n2 - 9
n1, n2 = (n2, n1)
함수로부터 2개 이상의 값을 반환받는 것도 튜플을 통해 구현됨
enumerate()사용하기
enumerate()함수를 사용하면 인덱스 값과 요소 값에 안전하게 접근 가능
fruits=["apple", "banana", "grape"]
for index, value in enumerate(fruits):
print(index, value)
fruits=["apple", "banana", "grape"]
result=list(enumerate(fruits))
print(result)
>>>[(0, "apple"), (1, "banana"), (2, "grape")]
튜플의 장점
🔑튜플을 통해 반복하는 것이 리스트 반복보다 빠름
->변경 불가능 객체이기 때문에 그만큼 처리 코드가 간단해짐
🔑딕셔너리의 키가 되 수 있음
->리스트는 변경 가능하기 때문에 딕셔너리의 키가 되 수 없음
🔑다른 개발자가 특정 데이터를 변경하는 것을 금지하려면 튜플을 사용하면 됨
세트
특정 순서로 저장되지 않으며 위치별로 액세스 할 수 없음
리스트보다 연산이 훨씬 빠름
중복 항목은 없어야 함
세트_이름={항목 1, 항목2, 항목3, ...}
numbers={1,2,3} #초기화되 세트 생성
vaues=set() #공백 세트 생성
리스트로부터 세트 생성 가능
set()함수 사용
세트는 집합이기 때문에 요소가 중복되면 자동으로 중복된 요소 제거
numbers=set([1,2,3,1,2,3])
print(numbers)
문자열로부터 세트 생성 가능
이때 각 문자들이 하나의 요소가 됨
letters=set("abc")
비어있는 세트를 생성하려면 인수 없는 set()함수 사용
⚠{}가 아님!!! {}는 공백 딕셔너리 생성
numbers=set()
요소 추가하고 삭제하기
세트는 변경 가능한 개체
세트 요소를 추가하거나 삭제 가능
세트의 요소에는 인덱스가 없기 때문에 인덱싱이나 슬라이스 연산은 의미 없음
add() 함수 사용해서 하나의 요소 추가 가능
삭제할 때는 remove(), discard() 메소드 사용
🔑삭제하고자 하는 요소가 없으면 discard()는 그냥 넘어가지만 remove()는 오류를 생성
-> 몇 개의 세트에서 특정한 항목을 삭제할 때는 discard()를 사용하는 것이 좋음
fruits.add("kiwi")
fruits.remove("kiwi")
세트의 모든 요소를 삭제하려면 clear()메소드 사용
세드에 여러 개의 항목을 추가할 때는 update() 메소드 사용
fruits={"apple", "banana", "grape"}
fruits.update(["orange", "mango", "kiwi"])
print(fruits)
세트 함축 연산
세트 함축 (Set Comprehensions)
ex) 리스트 안의 숫자가 짝수이면 숫자를 세트에 추가
세트이기 때문에 동일한 숫자는 딱 한 번만 추가됨
aList=[1,2,3,4,5,1,2]
result={x for x in aList if x%2==0}
print(result)
리스트 함축과 모든 것이 동일하고 [...] 대신 {...}가 사용됨
부분 집합 연산
A={"apple", "banana", "grape"}
B={"apple", "banana", "grape", "kiwi"}
if A<B:
print("A는 B의 부분 집합입니다.")
2개의 세트가 같은지도 검사 가능
==와 != 연산자 사용
A={"apple", "banana", "grape"}
B={"apple", "banana", "grape", "kiwi"}
if A==B:
print("A와 B는 같습니다.")
else:
print("A와 B는 같지 않습니다.")
교집합, 합집합, 차집합 연산
세트가 유용한 이유: 교집합, 합집합과 같은 여러 가지 집합 연산 지원
A={"apple", "banana", "grape"}
B={"apple", "banana", "kiwi"}
합집합: | union()
C=A|B #또는 C=A.union(B)
교집합: & intersection()
C= A&B #또는 C=A.intersection(B)
차집합: -, difference()
C=A-B #또는 C=A.difference(B)
리스트<->세트
리스트에 set() 함수를 적용하면 세트가 됨
세트에 list()함수를 적용하면 리스트가 됨
ex) 리스트 안에 서로 다른 정수는 몇 개나 있을까?
리스트를 세트로 변환시킨 후에 len() 함수 적용
list1=[1,2,3,4,5,1,2,4]
letn(set(list1))
ex) 2개의 리스트에 공통적으로 들어 있는 숫자 얻기
list1=[1,2,3,4,5]
list2=[3,4,5,6,7]
set(list1)&set(list2)
>>>{3,4,5}
딕셔너리
딕셔너리_이름={키1:값1, 키2:값2, 키3:값3, ... }
딕셔너리에서 값(value)은 어떤 유형이던지 상관없지만, 키(key)는 반드시 불변 객체이고 유일해야 함
즉, 유일한 문자열이나 숫자, 튜플이어야 함
딕셔너리에서 가장 중요한 연산: 키를 가지고 연관된 값을 찾는 것
🔑리스트에서는 인덱스로 값을 찾고, 딕셔너리에서는 키로 값을 찾음
⚡존재하지 않는 키 제시할 경우 KeyError 예외 처리
get()함수 사용
두 번째 인수 지정하면 키를 찾을 수 없는 경우에 두 번째 인수를 반환함
captials.get("France", "해당 키가 없습니다.")
>>>해당 키가 없습니다.
항목 추가하기: [] 연산자 사용
capitals={}
capitals["Korea"]="Seoul"
딕셔너리는 순서가 지정되지 않은 콜렉션이므로 출력 순서는 키-값 쌍이 딕셔너리에 추가된 순서와 다를 수 있음
다른 딕셔널를 추가하고 싶은 경우: update()사용
capitals={"Korea":"Seoul", "USA":"Washington", "UK":"London"}
capitals.update({"France":"Paris","Germany":"Berlin"}
항목 삭제하기: pop()메소드 사용
if "UK" in capitals:
capitals.pop("UK")
🍋clear(): 딕셔너리에 저장된 모든 키-값 쌍을 삭제하는 함수
항목 방문하기
capitals={"Korea":"Seoul", "USA":"Washington", "UK":"London"}
for key in capitals:
print(key, end=" ")
>>> Korea USA UK
값 출력하기 1: dictonary[key]
capitals={"Korea":"Seoul", "USA":"Washington", "UK":"London"}
for key in capitals:
print(key,":",capitals[key])
>>> Korea : Seoul
>>> USA : Washington
>>> UK : London
값 출력하기 2: 딕셔너리의 items() 메소드 사용
capitals={"Korea":"Seoul", "USA":"Washington", "UK":"London"}
for key, value in capitals.items():
print(key, ":", value)
>>> Korea : Seoul
>>> USA : Washington
>>> UK : London
items()함수는 키와 값을 튜플로 반환하고 이것이 key와 value 변수로 언패킹되어서 반복됨
딕셔너리 함축
values=[1,2,3,4,5,6]
dic={x: x**2 for x in values if x%2==0}
print(dic)
>>>{2:4 ,4: 16, 6:36}
dic: 딕셔너리
x: x**2: 출력 수식
values: 입력 리스트
x%2==0: 조건식
🔑리스트 함축 안에 콜론이 있으면 딕셔너리, 없으면 세트
키, 값 쌍 뒤집기
dic1={"One":1, "Two":2, "Three":3}
dic2={n: w for w, n in dic1.items()}
print(dic2)
{n: w for w, n in dic1.items()} 부분은 딕셔너리 컴프리헨션을 사용하여 반복문과 조건식을 통해 새로운 딕셔너리를 생성합니다.
여기서 dic1.items()는 dic1의 키-값 쌍들을 (key, value) 튜플로 반환하는 메서드입니다. for w, n in dic1.items()은 이 튜플들을 반복하면서 튜플의 첫 번째 요소를 w, 두 번째 요소를 n에 할당합니다.
따라서 {n: w for w, n in dic1.items()}은 dic1의 키-값 쌍을 반전시키는 역할을 합니다. 키와 값이 서로 바뀐 새로운 딕셔너리인 dic2가 생성됩니다. 예를 들어, 주어진 dic1이 {"One": 1, "Two": 2, "Three": 3}일 때, dic2는 dic1의 키-값 쌍을 반전시킨 결과인 {"1": "One", "2": "Two", "3": "Three"}가 됩니다.
문자열
| 함수 | 설명 |
| chr() | 정수를 문자열로 변환 |
| ord() | 문자를 정수로 변환 |
| len() | 문자열의 길이를 반환 |
| str() | 객체의 문자열 표현을 반환 |
가장 간단한 문자 코드 시스템: 아스키
만약 문자가 알파벳이 아니면 유니코드 값을 반환
인덱싱
🍋시퀀스(sequence): 항목들이 순서를 가지고 모인 자료구조
->리스트에서 사용했던 인덱싱이나 슬라이싱 같은 연산들과 len() 같은 내장 함수들이 문자열에도 동일하게 적용됨
슬라이싱
🍋슬라이싱(slicing): 문자열의 일부를 잘라서 서브 문자열을 만드는 연산
s[6:10]: s[6]에서 s[9]까지의 문자를 모두 선택한다는 의미
s="Monty Python"
t=s[-2:]
t
>>> "on"
파이썬 문자열은 변경 불가능한 객체
문자열의 일부 글자를 바꾸려고 하면 오류 발생
사본생성해서 바꾸기
word="abcdef"
word="A"+word[1:]
word
>>>"Abcdef"
문자열 비교하기
<>==!= 연산자 적용해서 비교 가능
문자열 출력하기
🍋f-문자열(f-string): 변수 이름 직접 지정, 파이썬은 변수 이름을 해당 값으로 바꿈
x=25
y=98
prod=x*y
print(f"{x}과 {y}의 곱은 {prod}")
문자열 메소드
🍋메소드(method): 객체 안에 있는 함수
객체에서 메소드 호출하는 구문
obj.sub(<인수>)
대소문자 변환기
s.capitalize(): 첫 문자만 대문자로 변환하는 메소드
s.lower(): 모든 문자 소문자로 변환
s.upper(): 모든 문자 대문자로 변환
찾기 및 바꾸기
startswith(s), endswith(s), find(s), rfind(s), count(s)
startswith(s): 문자열 s로 시작되는 문자열이면 True반환
endswith(s): 문자열 s로 끝나는 문자열이면 True반환
replace(): 부분 문자열을 다른 문자열로 변환
s="www.naver.com"
s.replace("com", "co.kr")
>>>www.naver.co.kr
find(): 대상 문자열 안에서 부분 문자열 찾아서 인덱스 반환
찾지 못할 경우 -1반환
s="www.naver.com"
s.find(".kr")
>>>12
s.rfind(<sub>[,<start>[,<end>]]): 끝에서 시작하여 지정된 부분 문자열을 대상 문자열 안에서 검색
뒤에서 처음 나오는 애 인덱스 출력
count(): 등장 횟수 반환
시작위치랑 종료위치 설정 가능
s="www.naver.co.kr"
s.count(".", 0.5)
>>>1
문자 분류
s.isalpha(): 문자열 s 안의 모든 문자가 알파벳이면 True 반환
s.isdigit(): 문자열 s가 숫자로만 구성되어 있으면 True 반환
s.islower(): 모든 문자 소문자면 True
s.isupper(): 모든 문자 대문자면 True
공백 문자 제거
strip(): 문자열의 첫 부분과 끝 부분에서 공백문자 제거, 문자 사이의 공백은 제거하지 않음
문자열 앞뒤의 특정한 문자를 삭제하려면 문자를 strip()인수로 전달
s.strip("#")
->텍스트 데이터 분석할 때 불필요한 공백 문자 제거하는데 사용됨
문자열 분해하기
split(): 주어진 분리자를 이용하여 문자열을 토큰들의 리스트로 반환
s="Welcome to Python"
s.split()
>>>["welcome", "to", "Python"]
split()에 인수를 주지 않고 호출하면 공백 문자 ''를 분리자로 가정하여서 문자열을 분리함
분리자 문자 전달 가능
s="Hello World!"
s.split(",")
>>>["Hello", " World!"]
여기서 W 앞의 공백까지 제거하려면?
s="Hello, World!"
s.split(", ")
>>>["Hello", "World!"]
문자열을 문자들로 분해하려면? list()호출
문자열 결합하기
join(): 단어들을 모아서 하나의 문자열로 만드는 역할을 하는 함수
접착제 역할하는 문자 지정 가능
",".jon(["apple","grape","banana"])
>>>"apple,grape,banana"
전화번호에서 "." 문자 대신에 "-"문자를 사용하고 싶으면 다음과 같은 코드 사용하기
"-".join"010.1234.5678".split("."))
>>>"010-1234-5678"
join()은 접착제 문자를 단어 사이에만 넣고 단어의 앞이나 뒤에는 넣지 않음
문자들을 모아서 다시 문자열로 만들 때도 jon() 사용
s="hello world"
clist=list(s)
clist
>>>['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
"".join(clist)
>>>"hello world"
split()와 join()을 함께 사용하면 문자열 중에서 필요 없는 공ㅂ 제거 가능
" ".join("Actoins \n\t speak louder tahn words".split())
#split()이 단어들 사이에 있는 공백 문자드을 없애고 단어들의 리스트로 만듦
>>>Actoins speak louder tahn words
'프로그래밍 > Python' 카테고리의 다른 글
| 📔파워 유저를 위한 파이썬 Express08. 객체와 클래스 (0) | 2023.05.29 |
|---|---|
| 📔파워 유저를 위한 파이썬 Express 07. Programming 문제풀이 (0) | 2023.05.27 |
| 📔파워 유저를 위한 파이썬 Express 06. 파이썬 자료구조 1(리스트) (0) | 2023.05.19 |
| 📔파워 유저를 위한 파이썬 Express: 05. 함수 (0) | 2023.05.17 |
| 파이썬 문자열 출력(2) (0) | 2023.05.03 |