본문 바로가기
Spec UP - Backend/혼자 공부하는 파이썬

chap_04-4. 문자열, 리스트, 딕셔너리와 관련된 기본 함수

by TIS_Ha 2023. 10. 26.
반응형

리스트에 적용할 수 있는 기본 함수

함수 설명
min() 리스트 내부에서 최솟값을 찾는다.
max() 리스트 내부에서 최댓값을 찾는다.
sum() 리스트 내부에서 값을 모두 더한다.

reversed() 함수로 리스트 뒤집기

리스트에서 요소의 순서를 뒤집고 싶을 때는 reversed() 함수를 사용한다.

list_a = [1,2,3,4,5]
list_b = reversed(list_a)

print(list_b)
print(list(list_b))

위의 list_b를 출력한 값을 보면 <list_reverseiterator object at (주소)>가 출력된 것을 확인할 수 있다.

이는 reversed() 함수의 리턴 값이 'reverseiterator', 즉 이터레이터이기 때문이다.

 

* 이터레이터 (Iterator)

for 반복자 in 반복할 수 있는 것

반복문은 위와 같은 구조로 구성되는데 여기서 '반복할 수 있는 것'을 이터러블(iterable)이라고 한다.

이터러블은 내부에 있는 요소를 차례차례 꺼낼 수 있는 객체를 의미한다.(ex. 리스트, 딕셔너리, 문자열, 튜플 등)

이터러블 중에서 next() 함수를 적용해 하나씩 꺼낼 수 있는 요소를 이터레이터라고 한다.

이터레이터는 반복문의 매개변수로 전달할 수 있으며, next() 함수로 내부의 요소들을 하나씩 꺼낼 수 있다.

list_a = [1,2,3,4,5]
list_b = reversed(list_a)

print("list_b : ", list_b)
print(next(list_b)) #5
print(next(list_b)) #4
print(next(list_b)) #3
print(next(list_b)) #2
print(next(list_b)) #1

reverse() 함수가 리스트를 바로 리턴하지 않고 이터레이터를 리턴해주는 이유는 메모리의 효율성을 위해서이다.

1만개의 요소가 들어있는 리스트를 복제한 뒤 뒤집어서 리턴하는 것보다 기존에 있는 리스트를 활용해서 작업하는 것이 효율적이라고 판단하기 때문이다.

 

enumerate() 함수와 반복문 조합하기

리스트 안에 요소를 반복해서 출력하면서 현재 인덱스가 몇번째인지 확인해야 할 때 아래와 같이 코드를 작성할 수 있다.

example_list = ["요소A","요소B","요소C"]

# 방법 1 : item 이용
i = 0
for item in example_list:
    print("{}번째 요소는 {}입니다.".format(i,item))
    i += 1

#방법 2 : range 이용
j = 0
for j in range(len(example_list)):
    print("{}번째 요소는 {}입니다.".format(j, example_list[j]))

파이썬은 이러한 코드를 쉽게 작성할 수 있도록 enumrate() 함수를 제공한다.

enumrate() 함수를 사용하면 for와 in 사이에 반복 변수를 두개 넣을 수 있다.

example_list = ["요소A","요소B","요소C"]

print(enumerate(example_list))
# <enumerate object at (주소)> 출력
print(list(enumerate(example_list)))
#[(0, '요소A'), (1, '요소B'), (2, '요소C')] 출력

for i, value in enumerate(example_list):
    print("{}번째 요소는 {}입니다.".format(i,value))

 

딕셔너리의 items() 함수와 반복문 조합하기

enumerate() 함수와 반복문을 조합해 for i, value in enumerate(리스트) 형태로 반복문을 작성한 것처럼

딕셔너리는 items() 함수를 이용해 키와 값을 조합해서 쉽게 반복문을 사용할 수 있다.

example_dictionary = {
    "키A" : "값A",
    "키B" : "값B",
    "키C" : "값C"
}

print(example_dictionary.items())
# dict_items([('키A', '값A'), ('키B', '값B'), ('키C', '값C')]) 출력
for key, element in example_dictionary.items():
    print("dictionary[{}] = {}".format(key,element))
# dictionary[키A] = 값A ... 출력

리스트 내포(list comprehensions)

반복문을 사용해 리스트를 재조합하는 경우에 대해 알아보자.

array = []

for i in range(0,20,2):
    array.append(i*i)

print(array) # [0,4,16,36,64,100,144,196,256,324]

위의 코드는 0부터 20사이의 짝수를 구한 뒤 제곱한 값으로 새로운 리스트를 만든다.

위 코드를 리스트 내포를 이용해 아래와 같이 표현할 수 있다.

array = [i*i for i in range(0,20,2)]

print(array) # [0,4,16,36,64,100,144,196,256,324]

리스트 내포는 최종결과를 앞에 작성하여 리스트를 재조합한다.

리스트 이름 = [표현식 for 반복자 in 반복할수있는것]
리스트 이름 = [표현식 for 반복자 in 반복할수있는것 if 조건문]

 

구문 내부에 여러줄 문자열을 사용할 때 발생하는 문제 해결방법

1) 괄호로 문자열 연결하기

괄호 () 내부에 문자열을 여러개 입력하면 모든 문자열을 합친 새로운 문자열이 만들어진다.

중간에 줄바꿈을 원하는 경우에는 마지막을 제외한 문자열 뒤에 \n을 입력한다.

test = (
    "이렇게 여러줄로"
    "나눠서 입력해도\n"
    "하나의 문자열로 연결됩니다."
)
print(test) # 이렇게 여러줄로나눠서 입력해도
            # 하나의 문자열로 연결됩니다.
print(type(test)) #<class 'str'>

2) 문자열의 join() 함수 이용하기

문자열.join(문자열로 구성된 리스트a, 리스트b)

join()함수를 이용하면 앞에 있는 문자열을 이용해 리스트의 요소를 문자열로 연결한다.

print("::".join(["1","2","3"])) #1::2::3

number = 50

if number %2 == 0:
    print("\n".join([
        "문자열은 {}입니다.",    # 문자열은 50입니다.
        "{}은 짝수입니다.",      # 50은 짝수입니다.
        "줄바꿈이 실행됩니다."   # 줄바꿈이 실행됩니다.
    ]).format(number,number))

 

반응형

'Spec UP - Backend > 혼자 공부하는 파이썬' 카테고리의 다른 글

chap_05-2. 함수의 활용  (0) 2023.11.13
chapter_05-1. 함수 만들기  (0) 2023.10.27
chap_04-3. 범위 자료형과 while 반복문  (0) 2023.10.13
chap_04. 반복문  (0) 2023.09.14
chap_03. 조건문  (0) 2023.08.31

댓글