Python

데이터의 구조 (Data Structure)

김디니 2022. 7. 14. 22:23

메서드 (Method)

메서드의 형식은 이러하다.

타입 .메서드()

  • 타입: 누가 할 수 있는지
  • (): input은 무엇인지
  • 타입.메서드(): 이를 통한 결과는 무엇인지

메서드와 함수 비교

a와 b를 정렬해보자.

a = [10, 1, 100] # 매서드 사용
new_a = a.sort()
print(a, new_a)
# 출력: [10, 1, 100] None
# list 메서드를 활용하면, 그 메서드를 정렬된 상태로 변경한다. (원본을 변경한다.)
# return되는 것은 None이다.

#a의 실제 활용 코드
a = [10, 1, 100]
a.sort() # a를 정렬된 상태로 활용한다. 

b = [10, 1, 100] # 함수 사용 
new_b = sorted(b)
print(b, new_b)
# 출력: [10, 1, 100] [1, 10, 100]
# sorted 함수를 활용하면 원본을 변경하지 않는다. 
# return되는 것은 정렬된 리스트이다. 

# b의 실제 활용 코드
b = [10, 1, 100]
b = sorted(b) #바꾼 것을 넣어준다.

(FYI, 함수는 기능을 분해해서 독립적으로 쓸 수 있을 뿐만 아니라 추상화된 것이다. )

문자열

문자열 탐색 및 검증

.find(x)

x의 첫 번째 위치를 반환한다. (없으면 -1을 반환한다)

'문자열'.find('문') #출력:0 #인덱스이다.
'문자열'.find('김') #출력:-1

. index(x)

x의 첫 번째 위치를 반환한다. (없으면 오류가 발생한다)

'문자열'.in('문') #출력:0 
'문자열'.find('김') #출력:오류

문자열 관련 검증 메서드

'abs'.isalpha() #True #문자열인지 확인하는 것

'Ab'.isupper() #False #모두 대문자인지 확인하는 것

'ab'.islower() #True #모두 소문자인지 확인하는 것

'Title'istitle() #True #첫 글자가 대문자인지 확인하는 것

순서 상관 없으며 검증(확인)하는 메서드이다.

문자열 변경

.replace(old, new[,count])

바꿀 대상의 글자를 새로운 글자로 바꿔서 반환한다.

count를 지정하면 해당 개수만큼 실행한다.

 #모든 o를 a로 바꾸기
'coone'.replace('o', 'a') #caane

#2개의 o를 !로 바꾸기
'wooooowoo'.replace('o', '!', 2) # w!!ooowoo

.strip([chars])

특정한 문자들을 지정하면 양쪽 / 왼쪽 / 오른쪽을 제거한다.

보통 공백을 제거할 때 사용한다

기본은 모든 공백을 제거하며, 문자열을 지정하지 않으면 공백을 제거한다.

'     와우!\n'.strip() # '와우!'
'     와우!\n'.lstrip() # '와우!\n'
'     와우!\n'.rstrip() # '     와우!''
'안녕하세요????'.rstrip('?') # '안녕하세요'

.split(sep=None, maxsplit=-1)

문자열을 특정한 단위로 나눠 (문자를 쪼개서) 리스트로 반환한다.

기본은 공백으로 나누어준다.

'a,b,c'.split('_') # ['a,b,c']
'a,b,c'.split('') # ['a', 'b', 'c']

'separator'.join([iterable])

쪼개진 문자열을 합쳐준다.

반복 가능한(iterable) 컨테이너 요소들을 합쳐서 문자열로 반환한다.

''.join(['3', '5'])
# 출력: 35

names = ','.join(['홍길동', '김철수'])
# 출력: 홍길동,김철수

numbers = ' '.join([10, 20, 100])
print(numbers)
# 오류가 뜬다. 문자열이 입력되어야 하는데 숫자가 입력됐으므로. 

numbers =' '.join(map(str, [10, 20, 100]))
# 출력: 10 20 100

문자열이 아닌 값이 있으면 TypeError가 발생한다.

기타 변경

  • .upper(): 대문자로 바꾸기
  • .lower(): 소문자로 바꾸기
  • .swapcase(): 대문자는 소문자, 소문자는 대문자로 바꾸기

문자열은 Immutable이라서 스스로 바뀌지 않는다.

(Immutable은 문자열, tuple , range)

 

리스트

  • 스스로 변경 가능하다. (mutable)
  • 반복 가능하다.(iterable)

 

값 추가 및 삭제

.append()

리스트 마지막에 값을 추가한다.

.extend(iterable)

반복가능한 것들을 넣으면 추가시켜준다.

a = ['apple']
a.extend('banana', 'mango')
print(a)
# TypeError가 발생한다. 
# 하나만 추가할 수 있기 때문이다. 
# 오류를 수정하기 위해서 리스트로 묶어줘야 한다. 
a.extend(['banana', 'mango']) #이렇게 수정해주면 된다!

a.extend('banana')
print(a)
# 문자열을 넣어줬네? 하고 글자 하나씩 출력된다. 
# 'b', 'a', 'n', 'a', 'n', 'a'

.insert(i, x)

정해진 위치에 값을 끼어 넣을 수 있다.

cafe = ['starbucks', 'tomato']
cafe.insert(0, 'start') 
#['start', 'starbucks', 'tomato']

cafe.insert(10000, 'end') 
# ['starbucks', 'tomato', 'end'] -> 리스트의 길이보다 큰 수인 경우 맨 뒤에 추가시켜준다.

.remove(x)

원본 리스트 자체를 바꾼다. (문자열과 다른 느낌)

값이 x인 것을 삭제한다.

x가 없는 경우 ValuieError가 뜬다.

.pop(i)

정해진 위치 i에 있는 값을 삭제하고, 그 항목을 반환한다.

i가 지정되어 있지 않으면 마지막 항목을 삭제하고 반환한다.

하나를 꺼내주면서 값 자체를 저장해서 쓸 수 있다.

numbers = ['hi', 1, 2, 3]

pop_number = numbers.pop()
#['hi', 1, 2]
pop_number = numbers.pop(0)
#[1, 2, 3]

.remove()는 을 제거하고, .pop()은 마지막 혹은 인덱스를 제거한다.

.clear()

모든 항목을 삭제한다.

탐색

.index(x)

x 값을 찾아 인덱스 값을 반환한다. (위치를 알려준다.)

numbers = [1, 2, 3, 4]

print(numbers.index(3)) #3이란 숫자 있어? 웅! #출력: 2
print(numbers.index(100)) #100이란 숫자 있어? 없엉==오류

.count(x)

원하는 값의 개수를 반환한다.

numbers = [1, 2, 3, 4, 1, 1]
numbers.count(1) #3
numbers.count(100) #0

.sort()

원본 리스트를 정렬하고 None을 반환한다.

sorted 함수와 비교해보자.

numbers = [3, 2, 5, 1]
result = numbers.sort()
print(numbers, result) 
#출력: [1, 2, 3, 5] None -> 원본이 변경되었다. 

numbers = [3, 2, 5, 1]
result = sorted(numbers)
print(numbers, result) 
#출력: [3, 2, 5, 1](원본) [1, 2, 3, 5] -> 원본이 변경되지 않고 정렬된 리스트를 반환한다.

.reverse()

순서를 반대로 뒤집어준다.

정렬을 하지 않는다.

None을 반환한다.

numbers = [3, 2, 5, 1]
result = numbers.reverse()
print(numbers, result) 
#출력: [1, 5, 2, 3] None

 

딕셔너리

  • 키와 값이 쌍으로 이뤄져있다.

조회

.get(key[.default])

Key에 있는 값을 가져올 수 있다.

KeyError가 발생하지 않는다.

default 값(0)을 넣어주면 0을 출력한다.

my_dict = {'apple': '사과', 'banana': '바나나'}

print(my_dict.get('pineapple')) # None
print(my_dict.get('apple')) # 사과
print(my_dict.get('pineapple', 0)) # 0

에러를 발생시키는 것이 있고 기본값을 설정하는 것이 있다.

 

추가 및 삭제

.pop(key[.default])

  • key가 딕셔너리에 있으면 제거하고 해당 값을 반환한다.
  • 그렇지 않으면 default를 반환한다.
  • default 값이 없다면 KeyError가 발생한다.
my_dict = {'apple': '사과', 'banana': '바나나'}
data = my_dict.pop('apple') #-> 키가 들어가야 한다. 
print(data, my_dict)
# 출력: 사과 {'banana': '바나나'}

.update([other])

입력한 새로운 키와 값으로 덮어준다.

my_dict = {'apple': '사', 'banana': '바나나'}
my_dict.update(apple='사과')
print(my_dict)
# {'apple': '사과', 'banana': '바나나'}

주의

딕셔너리는 인덱스 개념이 아닌 KEY에 접근하는 것이다.

딕셔너리는 Key로 접근하고 리스트는 인덱스로 접근한다.

또한, 딕셔너리끼리는 더하기를 할 수 없다.