2017-02-15 62 views
-1

我试图找到列表中的项目并使用项目来计算。但发生了TypeError: 'float' object is not subscriptablepython查找列表中的项目和'浮动'对象不可以订阅

这里的问题/列表:

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

我想定位history_lists每个列表中的最后两个项目,并计算平均值。

这里是我的代码:

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

我不确定错误,但在任何情况下,我不认为你的程序会做你的期望。你有一个返回语句的for循环。这意味着程序只会在循环中返回并返回。你的整个代码块相当于'return(history_lists [0] [ - 1] + history_lists [0] [ - 2])/ 2.0'。也许你想打印而不是回报?或者存储在某处并在循环结束时打印整个内容? – bouletta

+1

为什么'返回'?如果你正在寻找一个发电机,然后使用'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

注意:答案必须是Python语言,而不是p ++(我刚刚提出)。这太糟糕了,因为我愿意鼓励第一次张贴海报... –

+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