-
[Python] 당신의 for문에서 map()이 안되는 이유언어/Python 2024. 4. 22. 20:20
상황 설명
아래 코드에 대해서 한번 생각해보고 글을 읽기 바랍니다.n = int(input()) for i in range(n): a = map(int,input().split()) print(a)
- 저와 같은 초보자라면 아마 아래와 같이 생각할 수도 있을 거 같습니다.
- n = in(input()) : 사용자로부터 입력을 받은 후 정수로 변환
- for i in range(n): : n번 반복 ( 0~n-1까지)
- a = 공백을 기준으로 입력을 받은 뒤 정수로 변환
- a 출력
5 1 1 2 2 3 3 4 4 5 5 <map object at 0x0000020837A29750>
map object at ~이라 오류가 뜹니다.
무엇이 문제였을 까요?
https://stackoverflow.com/questions/37417210/lazy-evaluation-of-map
입력값을 정수로 변환한 후에 맵 객체를 생성했지만, 그 결과를 적절하게 처리하지 않아서 발생한 문제이다.
map 객체는 '지연평가'를 사용한다. 즉, 생성될 때 바로 계산 되지 않고, 필요할 때까지 값을 계산하지 않습니다.
하지만 이 경우 값을 실제로 계산하여 결과를 얻어야 된다. 따라서 맵 객체를 리스트로 변환하여 실제 값으로 계산하고 저장해야 된다. 이를 위해 list() 함수를 사용하는 것이다.
* 지연평가
지연 평가(Lazy Evaluation)는 프로그램에서 실제로 필요한 시점까지 연산을 수행하지 않고, 필요한 값이 사용될 때까지 연산을 미루는 것을 말합니다. 이는 메모리를 효율적으로 사용할 수 있게 해주고, 성능을 향상시킬 수 있는 장점이 있습니다. 맵(map) 객체에서의 지연 평가는 맵 객체가 생성될 때 실제 연산이 수행되지 않고, 대신에 필요한 시점에 연산이 이루어집니다. 예를 들어, map() 함수를 사용하여 리스트의 모든 요소에 함수를 적용하는 경우에는 맵 객체가 반환됩니다. 이 맵 객체는 요소를 하나씩 반복하면서 실제 연산을 수행하지 않고, 요소가 필요한 시점에 함수를 적용하여 값을 반환합니다.
def square(x): print("계산 중:", x) return x ** 2 numbers = [1, 2, 3, 4, 5] squared_numbers = map(square, numbers) print("맵 객체 생성 후") for num in squared_numbers: print("반복문 내:", num)
맵 객체 생성 후 계산 중: 1 반복문 내: 1 계산 중: 2 반복문 내: 4 계산 중: 3 반복문 내: 9 계산 중: 4 반복문 내: 16 계산 중: 5 반복문 내: 25
*map()
map() 함수는 파이썬의 내장 함수 중 하나로, 주어진 함수를 반복 가능한(iterable) 객체(리스트, 튜플 등)의 각 요소에 적용하여 새로운 맵 객체를 반환합니다. 이 맵 객체는 필요할 때까지 연산을 수행하지 않고, 요소가 필요한 시점에 함수를 적용하여 값을 반환하는 지연 평가의 특성을 가집니다.
map(function, iterable, ...)
- function: 각 요소에 적용할 함수입니다.
- iterable: 함수를 적용할 반복 가능한(iterable) 객체입니다. 여러 개의 iterable을 전달할 수 있으며, 이 경우에는 각 iterable에서 같은 인덱스에 있는 요소들이 함수의 인자로 전달됩니다.
해답코드
n = int(input()) # 학생 수 입력 inputs = [] # 입력을 저장할 리스트 생성 for i in range(n): # 입력을 정수로 변환하여 리스트에 추가 a = list(map(int, input().split())) inputs.append(a) print(inputs)
'언어 > Python' 카테고리의 다른 글
왜 Python 에서 `list`타입이 `replace` 메소드를 지원하지 않을까? (0) 2024.05.28 왜 Python에서 `str`타입이 append 메소드를 지원하지 않을까? (0) 2024.05.28 [Python] List Comprehensions이란? (0) 2024.04.22 [Python] 유니코드란? & 활용한 문제 예시(feat.CodeUp : 6,069 평가 입력 받아 다르게 출력하기(py)) (0) 2024.04.17 [Python] print(a and b) 와 print(a & b) 차이 (0) 2024.04.16