[python] Python지도 개체는 구독 할 수 없습니다.

다음 스크립트에서 오류가 발생하는 이유는 무엇입니까?

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유형의 반복 가능한 객체를 반환하므로 . 목록 결과를 강제하려면 다음을 작성하십시오.mapmap[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의 표준 들여 쓰기 양입니다.


답변