Python调用错误类型的变量

时间:2015-07-11 16:22:51

标签: python sorting

我的排序算法存在一些问题

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)

首先让我解释它的作用,因为我没有做过任何评论。

First List_Of_Players是一个全局字典,用于保存使用不同过程给出的玩家信息

  1. 创建两个数组,然后附加字典引用号 并且以[x,points]
  2. 的格式指向Score_List的总分
  3. 虽然Score_List具有值,但它将通过列表检查 如果它们是一个有很多分数的数组
  4. 最大值会附加到Sorted_List并从Score_List中删除并打印到屏幕上(现在看它是否有效)
  5. 我的问题是,尽管指向第11行中的整数,但Python认为我正在使用列表进行比较。

      

    TypeError:列表索引必须是整数,而不是列表

    为了尝试解决这个问题,我尝试将两个最大刻度更改为

    maximum = int(Score_list[x])
    

    感谢您的阅读,这是我第一次尝试使用排序算法,因此必然会出现更多错误,但如果有人能帮助解决TypeError,我会非常感激。

3 个答案:

答案 0 :(得分:0)

从这个片段:

List_Of_Players[x][1]

很明显,您的播放器列表是一个列表列表。

从这个片段:

for x in List_Of_Players:
很明显,x因此是一个列表。

所以在这个片段中:

List_Of_Players[x][1]

你正在使用列表作为索引,这是Python解释器所抱怨的。

答案 1 :(得分:0)

在这一行:

for x in Score_List:

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

答案 2 :(得分: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]