2015-07-11 67 views
0

的,我有一些问题,我的排序algorithimPython的调用错误的类型类型的变量

def Rank_Players(): 
    Score_List = [] 
    Sorted_List = [] 
    for x in List_Of_Players: 
     Score_List.append([x,List_Of_Players[x][1]]) 

    while Score_List: 
     maximum = Score_List[x] 
     for x in Score_List: 
      if Score_List[x][1] > maximum[1]: 
       maximum = Score_List[x][1] 
     Sorted_List.append(maximum) 
     Score_List.remove(maximum) 
    print (Sorted_List) 

首先让我来解释一下它,因为我已经没有做任何评论。

首先List_Of_Players是,使用不同的程序

  1. 创建两个阵列,然后追加字典参考编号 并有总指向Score_List格式为[X,点保持给定玩家的信息的全局字典]
  2. 虽然Score_List具有值它将经过列表检查 它们是否与点
  3. 最大附加到Sorted_List并从所述Score_List取出并打印到s的大量的阵列creen(现在看看它是否有效)

我的问题是,尽管在第11行指向一个整数,Python相信我比较使用列表。

TypeError: list indices must be integers, not list

为了试图解决这个问题,我已经尝试改变两个最大declerations到

maximum = int(Score_list[x]) 

谢谢您的阅读,这是我第一次尝试使用排序algorithim所以那里有必然是更多的错误,但如果有人可以帮助TypeError我会非常感谢。

+0

请解决您的压痕,并添加你的输入和预期的输出。什么是List_of_Players' – IanAuld

+3

'Score_List.append([x,List_Of_Players [x] [1]])'将列表元素添加到列表中,您可以通过'Score_List'中的for x访问列表元素。所以'x'确实是一个不是整数的列表。 – runDOSrun

+1

也在while循环中:'maximum = Score_List [x]',这里的'x'是什么,你没有定义它。 – Jkm

回答

0

从这个片段:

List_Of_Players[x][1] 

可以清楚地看到您的播放列表是列表的列表。

从这个片段:

for x in List_Of_Players: 

它变得清晰,x是因此列表。

因此,在这个片段:

List_Of_Players[x][1] 

你使用列表作为一个指标,这是Python解释器抱怨。

+0

感谢您打破心灵气焰,真正帮助我理解并澄清了一个错误概念。 – Thundershocked

0

在这一行:

for x in Score_List: 

x是一个列表(不可用作列表索引整数):[y,List_Of_Players[y][1]] 但是你用这样的:if Score_List[x][1]

0

这是错误这里是东西当循环遍历一个列表时,迭代器(这里是x)是的值,而不是索引。因此,而不是

for x in Score_List: 
     if Score_List[x][1] > maximum[1]: 
      maximum = Score_List[x][1] 

你应该做的

for x in Score_List: 
     if x[1] > maximum[1]: 
      maximum = x[1] 
+0

感谢您提供工作代码并清楚地解释问题。 – Thundershocked