다음 스크립트에서 오류가 발생하는 이유는 무엇입니까?
payIntList[i] = payIntList[i] + 1000
TypeError: 'map' object is not subscriptable
payList = []
numElements = 0
while True:
payValue = raw_input("Enter the pay amount: ")
numElements = numElements + 1
payList.append(payValue)
choice = raw_input("Do you wish to continue(y/n)?")
if choice == 'n' or choice == 'N':
break
payIntList = map(int,payList)
for i in range(numElements):
payIntList[i] = payIntList[i] + 1000
print payIntList[i]
답변
Python 3에서는 첨자 가능한 목록이 아니라 map
유형의 반복 가능한 객체를 반환하므로 . 목록 결과를 강제하려면 다음을 작성하십시오.map
map[i]
payIntList = list(map(int,payList))
그러나 대부분의 경우 인덱스를 사용하지 않으면 코드를 더 멋지게 작성할 수 있습니다. 예를 들어, list comprehensions :
payIntList = [pi + 1000 for pi in payList]
for pi in payIntList:
print(pi)
답변
map()
목록을 반환하지 않고 map
객체를 반환 합니다.
list(map)
다시 목록으로 만들려면 전화해야 합니다.
더 나은
from itertools import imap
payIntList = list(imap(int, payList))
중간 객체를 만드는 데 많은 메모리를 차지하지 않고 생성 할 때 전달 ints
됩니다.
또한 if choice.lower() == 'n':
두 번 할 필요가 없도록 할 수 있습니다 .
파이썬 지원 +=
: 당신이 할 수있는 payIntList[i] += 1000
그리고 numElements += 1
당신이 원하는 경우.
정말 까다로워지고 싶다면 :
from itertools import count
for numElements in count(1):
payList.append(raw_input("Enter the pay amount: "))
if raw_input("Do you wish to continue(y/n)?").lower() == 'n':
break
및 / 또는
for payInt in payIntList:
payInt += 1000
print payInt
또한 4 개의 공백은 Python의 표준 들여 쓰기 양입니다.