코딩 노트

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

Python

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

newbyeol 2021. 6. 20. 16:52

1. 리스트에 적용할 수 있는 기본 함수: min(), max(), sum()

min(), max(), sum() 함수들은 리스트를 매개변수로 넣어 사용하는 매우 기본적인 함수이다.

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

 

>>> numbers = [103, 52, 273, 32, 77]
>>> min(numbers)
32
>>> max(numbers)
273
>>> sum(numbers)
537

· 여기서 잠깐, 리스트를 사용하지 않고 최솟값, 최댓값 구하기

min() 함수와 max() 함수는 매개변수에 리스트를 사용하면 리스트 내부에서 최솟값과 최댓값을 찾는다. 하지만 매개변수에 리스트를 사용하지 않고 숫자 여러 개를 나열해서 최솟값과 최댓값을 찾는 방법도 있다.

>>> min(103, 52, 273)
52
>>> max(103, 52, 273)
273

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

리스트에서 요소의 순서를 뒤집고 싶을 떄는 reversed() 함수를 사용한다. reversed() 함수의 매개변수에 리스트를 넣으면 리스트를 뒤집을 수 있다.

# reversed() 함수
# 리스트를 선언하고 뒤집습니다.
list_a = [1, 2, 3, 4, 5]
list_reversed = reversed(list_a)

#출력합니다.
print("# reversed() 함수")
print("reversed([1, 2, 3, 4, 5]):", list_revresed)
print("list(reversed([1, 2, 3, 4, 5])):", list(list_reversed))
print()

#반복문을 적용해 봅니다.
print("# reversed() 함수와 반복문")
print("for i in reversed([1, 2, 3, 4, 5]):")
for i in reversed(list_a):
	print("-", i)

 

reversed() 잘못된 예:

temp = reversed([1, 2, 3, 4, 5, 6])

for i in temp:
	print("첫 번째 반복문: {}".format(i))

for i in temp:
	print("두 번째 반복문: {}". format(i))

코드를 실행하면 "첫 번쨰 반복문" 부분만 실행된다. "두 번쨰 반복문" 부분은 전혀 출력되지 않는다.

이는 reversed() 함수의 결과가 제너레이터이기 때문이다. 제너레이터는 파이썬의 특별한 기능으로, 일단 reversed() 함수와 반복문을 조합할 때는 함수의 결과를 여러 번 활용하지 않고 다음과 같이 for 구문 내부에 reversed() 함수를 곧바로 넣어서 사용한다고 기억해두자,

numbers = [1, 2, 3, 4, 5, 6]

for i in reversed(numbers):
	print("첫 번쨰 반복문: {}".format(i))

for i in reversed(numbers):
	print("두 번쨰 반복문: {}".format(i))

· 여기서 잠깐, 확장 슬라이싱

리스트를 뒤집을 수 있는 추가적인 방법으로 확장 슬라이싱이 있다. 다음과 같이 리스트에 [::-1]을 붙이면 리스트의 내용이 뒤집힌다.

>>> numbers - [1, 2, 3, 4, 5]
>>> numbers
[1, 2, 3, 4, 5]
>>> numbers[::-1]
[5, 4, 3, 2, 1]

비파괴적 코드이므로 원본 numbers에는 영향이 없다. 이는 문자열에도 적용할 수 있다.

>>> "안녕하세요"[::-1]
'요세하녕안'

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

리스트의 요소를 반복할 때 현재 인덱스가 몇 번째인지 확인해야 하는 경우가 많은데, 파이썬은 이런 코드를 쉽게 작성할 수 있도록 enumerate() 함수를 제공한다.

# enumerate() 함수와 리스트
# 변수를 선언합니다.
example_list = ["요소A", "요소B", "요소C"]

# 그냥 출력합니다.
print("# 단순 출력")
print(example_list)
print()

# enumerate() 함수를 적용해 출력합니다.
print("# enumerate() 함수 적용 출력")
print(enumerate(example_list))
print()

# list() 함수로 강제 변환해 출력합니다.
print("#list() 함수로 강제 변환 출력")
print(list(enumerate(example_list)))
print()

# for 반복문과 enumerate() 함수 조합해서 사용하기
print("# 반복문과 조합하기")
for i, value in enumerate(example_list): #enumerate() 함수를 사용하면 반복 변수를 (i, value)이런 형태로 넣을 수 있다.
	print("{}번째 요소는 {}입니다.".format(i, value))

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

enumerate() 함수와 반복문을 조합해서 for i, value in enumerate(리스트) 형태로 반복문을 작성할 수 있었던 것처럼 딕셔너리는 items() 함수와 함꼐 사용하면 키와 값을 조합해서 쉽게 반복문을 작성할 수 있다.

# 딕셔너리의 items() 함수와 반복문
# 변수를 선언합니다.
example_dictionary = {
	"키A" : "값A",
	"키B" : "값B",
	"키C" : "값C",
}

# 딕셔너리의 items() 함수 결과 출력하기
print("#딕셔너리의 items() 함수")
print("items():", example_dictionary.items())
print()

#for 반복문 items() 함수 조합해서 사용하기
print("# 딕셔너리의 items() 함수와 반복문 조합하기")

for key, element in example_dictionary.items():
	print("dictionary[{}] - {}".format(key, element))

4. 리스트 내포

프로그램을 만들 때는 반복문을 사용해 리스트를 재조합하는 경우가 많다. 예를 들어 다음 코드는 range(0, 20, 2)로 0부터 20 사이의 짝수를 구한 뒤, 제곱해서 새로운 리스트를 만드는 것이다.

# 반복문을 사용한 리스트 생성
# 변수를 선언합니다.
array = []

# 반복문을 적용합니다.
for i in range(0, 20, 2):
	array.append(i * i)

# 출력합니다.
print(array)

이런 형태의 코드는 많이 볼 수 있는데, 파이썬 프로그래밍 언어는 이를 한 줄로 작성할 수 있는 방법을 제공한다.

# 리스트 안에 for문 사용하기
# 리스트를 선언합니다.
array = [i * i for in range(0, 20, 2)] #최종 결과를 앞에 작성한다 (i * i)

# 출력합니다.
print(array)

"range(0, 20, 2)의 요소를 i라고 할 떄 i*I로 리스트를 재조합해 주세요"라는 코드이다. 이런 구문을 리스트 내포(list comprehensions)라고 부른다. 리스트 내포는 다음과 같은 형태로 사용한다.

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

뒤에 if 구문을 넣어 조건을 조합할 수도 있다.

# 조건을 활용한 리스트 내포
# 리스트를 선언합니다.
array = ["사과", "자두", "초콜릿", "바나나", "체리"]
output = [fruit for fruit in array if fruit != "초콜릿"]

# 출력합니다.
print(output)

"array의 요소를 fruit이라고 할 때 초콜릿이 아닌 fruit으로 리스트를 재조합해 주세요"라는 코드이다. 따라서 실행하면 초콜릿을 제외한 요소만 모인 리스트를 만들어 준다. if 구문을 포함한 리스트 내포는 다음과 같은 형태로 사용한다.

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

좀 더 알아보기

구문 내부에 여러 줄 문자열을 사용했을 때의 문제점

 

'Python' 카테고리의 다른 글

04-3 반복문과 while 반복문  (0) 2021.04.26
04-2 딕셔너리와 반복문  (0) 2021.04.26
04-1 리스트와 반복문  (0) 2021.04.22
03-2 if~else와 elif 구문  (0) 2021.04.20
03-1 불 자료형과 if 조건문  (0) 2021.04.18