2017-02-15 4 views
-1

私はリストのリスト内のアイテムを見つけようとしています。しかし、TypeError: 'float' object is not subscriptableが発生しました。pythonリストのリスト内のアイテムを見つけて 'float'オブジェクトにサブスクリプトがありません

は、ここで質問/リストです:

私は history_listsに各リストの最後の2つのアイテムを見つけて、その平均値を計算したい
history_lists=[[1,2,3,4],[2,3,1],[5,8,0,1]] 

は、ここに私のコードです:...私はあなたがこれらの線に沿ってより多くの何かをしたいと思います

def get_question(self): 

    combined_lists_history.append(var1) 
    combined_lists_history.append(var2) 

    history_lists = [[] for _for _ in range(max(combined_lists_history[1::2]))] 

    for i in range(1, len(combined_lists_history),2): 
      history_lists[combined_lists_history[i]-1].append(combined_lists_history[i-1]) 

# this codes are for recreating a list of lists 
# combined_lists_history = [1,**1**,3,**1**,5,**3**,4,**1**,2,**2**,3,**2**,1,**2**,8,**3**,0,**3**,1,**3**,2,**1**,] 
# history_lists=[[1,2,3,4],[2,3,1],[5,8,0,1]] 

def get_avg(self): 

    for i, lst in enumerate(history_lists): 
      (history_lists[i][-1] + history_lists[i][-2])/2.0 
      # for each list in history_lists, retrieve last two item 
+1

私は、エラーが不明だが、いずれにしても私はあなたのプログラムは、あなたが期待するものでしょうとは思いません。 return文を持つforループがあります。これは、プログラムがループ内で一度しか出てこないことを意味します。あなたのコードブロック全体は 'return(history_lists [0] [ - 1] + history_lists [0] [ - 2])/ 2.0'に相当します。たぶんあなたは返品の代わりに印刷したいですか?または、どこかに格納して、ループの最後にすべてを印刷しますか? – bouletta

+1

なぜ 'return'ですか?ジェネレータを作る場合は、 'yield'を使います。また、変数に 'list'という名前を付けないでください。 'list(map(lambda x:sum(x [-2:])/ 2.0、history_lists))'はあなたを遠ざけるはずです。 – Abdou

+0

エラーは、指定したコードにありません。完全なスタックトレースとコードをお願いします。 –

答えて

-2

あなたのスタイルを使用して
average = 0 
for list in history_lists: 
    final += (list[-1] + list[-2])/2 
print average 
+0

注:答えはp ++ではなく、Python言語でなければなりません(私はこれを作ったばかりです)。それは初めてのポスターを奨励して喜んでいるので、あまりにも悪いです... –

+0

答えの構文が訂正されました。私は最近、C#をたくさん書いていますので、そこに混在していますが、今はそうすべきです。 – techkris

0

、代わりに、よりPython的のアプローチ:

history_lists=[[1,2,3,4],[2,3,1],[5,8,0,1]] 
averages = [] 

# Don't use "list" as a variable name since that's a keyword 
for lst in history_lists: 
    avg = (lst[-1] + lst[-2])/2.0 
    averages.append(avg) 

print averages 

また、すべてを平均化する場合は、

history_lists=[[1,2,3,4],[2,3,1],[5,8,0,1]] 
total_count = 0 
total_sum = 0 

for lst in history_lists: 
    total_count += 2.0 
    total_sum += lst[-1] + lst[-2] 

total_average = total_sum/total_count 

print total_average 
1

あなたはリスト内包して簡潔にこれを達成することができます

history_lists=[[1,2,3,4],[2,3,1],[5,8,0,1]] 
averages=[(history_list[-1] + history_list[-2])/2.0 for history_list in history_lists] 

何があなたの関数が返されるlistを期待していますが、あなたのループ内returnを使用しているので、呼び出しているので、あなたの誤差がありそうでした代わりに単一のフロートを受け取ります。これは上記のようにaveragesリストを返すだけで修正されます。

編集:追加されました行方不明の括弧

+0

ああ、括弧を忘れました、編集のおかげで。 – Ben

関連する問題