source

Python map 개체를 구독할 수 없습니다.

factcode 2023. 5. 29. 11:11
반응형

Python map 개체를 구독할 수 없습니다.

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

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]

파이썬 3에서,map반복 가능한 유형의 개체를 반환합니다.map그리고 당신이 쓸 수 있는 구독 가능한 목록이 아닙니다.map[i]목록 결과를 강제로 지정하려면 다음과 같이 기록합니다.

payIntList = list(map(int,payList))

그러나 대부분의 경우 인덱스를 사용하지 않음으로써 코드를 훨씬 더 잘 쓸 수 있습니다.예를 들어, 목록이 포함된 경우:

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개의 공백이 파이썬의 표준 들여쓰기 금액입니다.

pypy3나 python3에서 이 문제에 범위를 사용할 필요가 없으므로 실제로 코드가 적습니다.

for i in payIntList: print ( i + 1000 )

그리고 공교롭게도 위의 PhiHag 솔루션에 있는 RustyTom의 코멘트와 일치합니다.참고: pypy3 또는 python3에서 배열 괄호 []를 사용하여 지도를 참조할 수 없습니다. 그렇지 않으면 동일한 오류가 발생합니다.

payIntList[i] 

지도 참조가 오류를 발생시켰습니다.

언급URL : https://stackoverflow.com/questions/6800481/python-map-object-is-not-subscriptable

반응형