nflight11   1년 전

혹시 동일한 map object에는 in을 두 번 이상 사용하지 못하나요?

만약 그렇다 한다면 그 이유는 왜인가요?

두 코드를 비교해 보시면 알겠지만 list화한 것 말고는 차이점이 전혀 없는데, 위 코드만 정답이고 아래 코드는 오답이라고 해서 이리 질문드립니다.

yunsh3594   1년 전

입력 예시 1 2 3 4 5

a = list(map(int, a.split())) 로 작성하게 되면 

a = [1, 2, 3, 4, 5] 로 들어가게 됩니다. 

a = map(int, a.split()) 는 1,2,3,4,5의 값을 a 라는 변수 하나에 넣을 수가 없어서 생기는 오류입니다. 

list를 사용하지않고 map를 사용하려면 

a1, a2, a3, a4, a5 = map(int, a.split()) 이런 형태로 입력의 개수만큼 변수를 늘려주면 되겠습니다. 

map 을 사용한 코드 예시입니다.

nflight11   1년 전

덕분에 하나 더 알아갑니다. 감사합니다!!

lambda   1년 전

map(functinn,iterable)은 iterable의 원소에 function을 적용하여 "하나" 씩 반환하는 iterator입니다.

map자체는 값을 저장하지 않습니다. a=map(int,['1','2','3']) 일 때 2 in a를 실행하면 map은 먼저 '1'에 int를 쓴 1을 반환하고 2!=1 이니 다음값 인 '2' 에 int를 씌운 2를 반환하고 2==2이니 2 in a는 true이고 a는 더 이상 반환하지 않습니다. a 내부적으로는 map(int,['3'])인 셈입니다. 여기서 2 in a를  한번 더 하면 a는 다음 원소인 '3' 에 int를 쓴 3을 반환하고 2!=3 인데 모든 원소를 반환 했으니 1 in a는 false입니다.

list를 쓰면 iterable(여기서는 a.split()) 의 모든 원소를 a라는 리스트에 저장해서 18 in a를 해도 a자체는 바뀌지 않지만  a=map(int,a.split())에서 a는 iterator 이기 때문에 17 in a를 하고 나면 a자체가 바뀌기 때문에 잘못된 결과가 나옵니다.

댓글을 작성하려면 로그인해야 합니다.