2017-10-11 8 views
0

私は、コードのこの部分がありますのpython:「マップ」オブジェクトが添字化されていないが

def substract_mean(self, group_point): 
    for i, a in enumerate(group_point): 
     group_point[i] = group_point[i] - self.mean_global[i] 
    return group_point 

をそして私は、次のエラーメッセージ受信:

group_point[i] = group_point[i] - self.mean_global[i]

TypeError: 'map' object is not subscriptable

+1

** 1 **あなたの質問のタイトルは、あなたが示したコードと一致していません。 ** 2 ** Python 3インタプリタで古いPython 2のコードを実行しようとしていると思われます。 –

+0

こんにちはスー、ようこそ!コードのインデントを確認できるように、コードの書式を修正してください。おそらくあなたが知っているように、通訳者とあなたがしようとしていることを理解するためには、適切なインデントが絶対に必要です。 –

+0

group_point変数が正常に列挙できる場合、問題はself.mean_globalです。 forループの代わりに 'print(type(self.mean_global))'を入れ、結果を投稿してください。 –

答えて

0

あなたは、Python 3を使用している場合は、マップを()関数はPython 2から変更されました。 map()はPython 3でイテレータを返します。したがって、それを添字付きリストに変換したい場合は、map()変数をlist()関数内に含める必要があります。

リスト(マップ(...))

出典:https://docs.python.org/3.0/whatsnew/3.0.html#views-and-iterators-instead-of-lists

0
def square(n): 
    return n*n 


class MeanClass: 
    mean_global = [10, 20, 30, 40] 

    def substract_mean(self, group_point): 
     for i, a in enumerate(group_point): 
      group_point[i] = group_point[i] - self.mean_global[i] 
     return group_point 


c = MeanClass() 
l = [1,2,3,4] 
m = map(square,l) 
print('works on a list object', c.substract_mean(l)) 
print('works on map object converted to a list',c.substract_mean(list(m))) 
print('fails on a map object',c.substract_mean(m)) 
関連する問題