이전 포스트에 이어..
Map()이 함수와 인자를 받아 결과를 반환해주는 구나! 라는 개념을 알게 되었고,
싱글벙글 문제 풀 생각에 설렜다.
그리고 첫 문제부터 난관에.. 봉착했다.
내가 숫자를 입력하면, 그게 하나의 리스트가 되어 변수에 저장된다.
근데 input()이 str형태로 저장되다 보니,
내가 '1 2 3 4' 이렇게 입력하면 ['1', '2', '3', '4'] 이렇게 저장되어
1도 문자열이 되는 현상이 발생하는 것이다.
당연히 배운 걸 써먹어야겠다는 생각을 했고, Map() 이거면 되겠다! 했다.
그래서 함수는 숫자형으로 바꿔주기 위한 int 함수를, 인자는 내가 입력한 값이
되도록 Map() 함수를 작성했고, 확인해보기 위해 출력을 했다.
그랬더니 map object .. 어쩌고 하며 이상한 말이 나왔다.
이걸 보고 내가 생각한 건 이미 ['1', '2', '3', '4'] 라는 리스트 형태가
되어 있는데, 이걸 하나의 숫자형으로 바꾸라고? 라는 의미인 줄 알았다.
그래서 값을 따로 추출해보기로 했다.
우선, 당연히 값은 출력 안될걸 알고 있었다.
어떤 오류가 뜨는지가 중요했는데 'TypeError: 'map' object is not subscriptable'
라는 에러가 떴다.
검색을 해보니, '첨자 가능한..' 이라는 뜻인데,
'map'이라는 객체는 원소를 하나씩 반환할 수 있지만 []연산자는 쓸 수 없다
a[0], a[0:2] 같이 접근할 수 없다는 뜻이다
라고 기술되어 있다. (여기서 가져온 설명임)
쉽게 말해, 리스트를 통해 반복은 가능하지만, 각 요소에 접근할 수는 없다!
라는 것이다.
a의 타입을 출력해본 결과 'map'이라고 나와있으니, 첨자 불가능한 상태였고,이걸 list형태로 바꿔준 다음 접근해야 하는 걸 알게 되었다.
list형태로 바꿔주기 위해 앞에 list 형태로 선언해줬고,
객체, 요소의 타입을 확인 후 출력해봤다.
그 결과 객체의 형태는 list가 되었고, 요소의 타입은 숫자형으로 바뀐 걸
알 수 있다.
그에 따라 리스트의 값도 문자열에서 숫자형으로 바뀌었다.