CHAPTER 06 리스트와 문자열의 함수들

유동헌·2021년 9월 4일
0

열혈파이썬_기초편

목록 보기
6/14

01 리스트와 함수들

st = [1,2,3,4,5]

print(len(st))
print(min(st))
print(max(st))

remove의 사용

st.remove(2)
print(st)

# 출력
[1, 3, 4, 5]

remove 함수를 호출해서 리스트에 저장되어 있는 값 2를 삭제하였다. 여기서 변수 이름 옆에 점을 찍고 remove 함수를 호출했다는 사실에 주목하자.

remove 함수 호출은 그 모양새가 지금까지 봐왔던 함수 호출과 조금 다르다. 그 이유는?

[1,2,3,4,5]

# 리스트는 이렇게 존재하는 것이 아니라,

[1,2,3,4,5]
remove x

# 이렇게 존재한다고 한다.

위와 같이 데이터(값)와 함수가 묶여서 존재하는 덩어리를 가리켜 객체라고 한다. 그러니까 사실 리스트는 객체이다. 그리고 객체 안에 존재하는 함수를 호출하는 방법은 다음과 같다.

st = [1,2,3]
st.remove(2) # st에 저장된 객체(리스트)의 remove 함수 호출

위와 같이 호출하면, st에 저장된 객체의 remove 함수가 호출된다. 그리고 객체 안에 존재하는 함수는 같은 객체에 저장되어 있는 데이터를 대상으로 일을 한다.

🔥 데이터와 함수가 함께 존재하는 것, 객체, 객체 안에 함수가 존재할 때, ~~~ 리스트.함수로 호출

그러니까 위에서 st에 저장된 리스트를 대상으로 remove(2)를 호출했으니 st의 리스트에서 2를 지워서 반환한다.

그리고 객체에는 다음과 같은 함수들이 존재한다.

append

extend

clear

insert

pop

remove

count

index

>>> st = [1,2,3]
>>> st.append(4)
>>> st
[1, 2, 3, 4]
>>> st.extend([5,6])
>>> st
[1, 2, 3, 4, 5, 6]
>>> st.insert(0,0)
>>> st
[0, 1, 2, 3, 4, 5, 6]
>>> st = []
>>> st
[]
>>> st.append(1)
>>> st
[1]
>>> st = [1,2,3,4,5]
>>> st.pop(0)
1
>>> st
[2, 3, 4, 5]
>>> st.remove(4)
>>> st
[2, 3, 5]
>>> st.count(2)
1
>>> st.index(3)
1
>>>

연습문제

빈 리스트를 만들어서 그 안에 1부터 10까지 넣었다가 다시 1부터 10까지 꺼내는(삭제하는) 코드를 만들어보자.

다시 10부터 1까지 꺼내는 코드를 만들어보자.

02 두 가지 유형의 함수가 갖는 특징들

  • 객체 안에 있는 함수
  • 객체 밖에 있는 함수

우리는 객체 밖에 있는 함수는 만들 줄 알지만 객체 안에 있는 함수는 만들 줄 모른다.

일단, 객체 안에 있는 함수들은 해당 객체만을 대상으로 동작한다 → 객체 안에 존재하는 함수들은 해당 객체에 특화되어 있다.

반면, 객체 밖에 있는 함수들은 특정 객체 또는 값에 특화되어 있지 않은 경향이 있다. 조금 쉽게 말하면 다양한 값이나 객체들을 대상으로 동작한다. 예를 들어서 다음 함수들은 리스트를 대상으로 동작하지만, len, min, max 이런 값들, 리스트 + 문자열에서도 동작한다.

그리고 객체 밖에 있는 함수가 만들기도 편하고 사용하기도 편하다. 그래서 편하다는 이유로 객체 밖에 있는 함수를 만들어서 사용하는 경우도 있다.

객체 밖에 있는 함수의 편리함!

  • 둘 이상의 다양한 종류의 값을 대상으로 동작하는 함수를 만들고자 하였다.
  • 또는 만들기 편하고 사용하기도 편해서 선택하였다.

반면 객체 안에 있는 함수의 형태로 만들었다면?

  • 해당 객체에 특화된 형태로 함수를 만들고자 하였다.

03 문자열과 함수들

사실 문자열도 리스트와 마찬가지로 하나의 객체!

s.count()
s.lower() # 수정된 내용을 반환하는 함수
s.upper() # 수정된 내용을 반환하는 함수
s.lstrip() # 공백 제거는 왜 쓰는지 잘 모르겠지만, 유용하다고 한다. 
s.rsript() # 공백 제거는 왜 쓰는지 잘 모르겠지만, 유용하다고 한다. 
s.replace(old, new)
s.split

>>> str = "best python"
>>> str.replace("best", "easy")
'easy python'
>>> str = "ab cd ef"
>>> ret = str.split()
>>> str
'ab cd ef'
>>> ret
['ab', 'cd', 'ef']
>>> str = "ab_cd_ef"
>>> str1 = str.split("_")
>>> str1
['ab', 'cd', 'ef']

📌 위의 예에서 보이듯이, split은 공백을 기준으로 문자열을 나눠서 리스트에 담는다!

연습문제

우리나라의 주민등록번호는 다음과 같은 구조이다.

"070440-04499444"

이 중에서 앞의 여섯 자리는 생년월일 정보이다. 따라서 문자열로 표현된 위의 주민등록번호에서 생년월일 정보만 꺼내서 출력하고자 하니, 이러한 기능을 제공하는 함수를 만들어보자. 예를 들어서 함수의 이름이 birth_only라 하면 이 함수를 대상으로 다음과 같은 결과를 보여야 한다.

>>> p1 = "070440-04499444"
>>> p1 = birth.only(p1)
>>> p1
070440

04 문자열의 탐색 관련 함수들

s.find

s.rfind

문자열의 위치를 찾는 함수

05 문자열의 일부로 포함이 되는 이스케이프 문자

>>> str = "escape\ncharacters"
>>> str
'escape\ncharacters'
>>> str = "escape\ncharacters"
>>> print(str)
escape
characters
>>> str = "escape\tcharacters"
>>> print(str)
escape	characters

06 함수가 아닌 del명령

>>> st = [1,2,3,4,5]
>>> st.clear()
>>> st
[]
>>> st = [1,2,3,4,5]
>>> st[:]
[1, 2, 3, 4, 5]
>>> st
[1, 2, 3, 4, 5]
>>> st[:] = []
>>> st
[]
>>> st = [1,2,3,4,5]
>>> st[2:] = []
>>> st
[1, 2]
>>> st = [1,2,3,4,5]
>>> del st[:]
>>> st
[]
>>> st = [1,2,3,4,5]
>>> del st[:3]
>>> st
[4, 5]
>>> st = [1,2,3,4,5]
>>> del st
>>> st
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'st' is not defined
profile
지뢰찾기 개발자

0개의 댓글