尝试在python中对2d数组进行排序,以输出高分列表

时间:2016-06-19 16:28:37

标签: python arrays sorting

所以我正在制作游戏服务器,让用户登录并选择要玩的游戏,然后将他们得到的任何分数添加到记事本文件中,格式为:(即二十一点)用户名,#chips,“筹码”。现在我想对文件中的所有分数进行排序以显示在我的gui上,但是我不允许使用像sort这样的内置函数,而是必须提出算法。我尝试了冒泡排序和插入排序,没有任何运气。这是我到目前为止所做的:

blackjackList = [['harsh', '4', 'chips'], ['ahmed', '25', 'chips'], ['yousef', '1003', 'chips'], ['krushangi', '200', 'chips'], ['bombberman', '1202', 'chips']]
def bubbleSort(alist):
    for passnum in range(len(alist)-1,0,-1):
        for i in range(passnum):
            if alist[i][1]>alist[i+1][1]:
                temp = alist[i]
                alist[i] = alist[i+1]
                alist[i+1] = temp
        return alist

目前输出

[['ahmed', '25', 'chips'], ['yousef', '1003', 'chips'], ['krushangi', '200', 'chips'], ['bombberman', '1202', 'chips'], ['harsh', '4', 'chips']]

当我将它与黑杰克列表一起使用时,我希望它能使黑杰克按顺序从上升到下降。

2 个答案:

答案 0 :(得分:3)

你的问题是return语句缩进太多并且位于for循环中,因此它只返回一个通过。

此外,您将数字作为字符串进行比较。这不会给出预期的顺序(例如" 10"小于" 2")。您应该使用int()将它们转换为整数,然后将正确排序。

答案 1 :(得分:0)

您可以使用quicksort对数组进行排序。

>>> blackjackList = [['harsh', '4', 'chips'], ['ahmed', '25', 'chips'], ['yousef', '1003', 'chips'], ['krushangi', '200', 'chips'], ['bombberman', '1202', 'chips']]
>>> def quicksort(arr):
...     if len(arr)==0: return []
...     if len(arr)==1: return arr
...     left = [i for i in arr[1:] if int(i[1])<int(arr[0][1])]    # for descending, exchange
...     right = [i for i in arr[1:] if int(i[1])>=int(arr[0][1])]  # these two values
...     return quicksort(left)+[arr[0]]+quicksort(right)
...
>>> quicksort(blackjackList)
[['harsh', '4', 'chips'], ['ahmed', '25', 'chips'], ['krushangi', '200', 'chips'], ['yousef', '1003', 'chips'], ['bombberman', '1202', 'chips']]

上面的代码给出了升序排序列表。要获得降序排序列表,只需在代码中交换leftright的值。