在 Python 中使用元组解包,无法找出逻辑错误

Used tuple unpacking in Python, can't figure out the logical error

似乎无法找出这里的问题:

我正在传递一个列表

vote_sort([("TOD",12),("Football",20),("Baseball",19),("Tennis",10)])

我得到的输出

[('Baseball', 19), ('Football', 20), ('TOD', 12), ('Tennis', 10)]

期望的输出:

[('Football', 20), ('Baseball', 19), ('TOD', 12), ('Tennis', 10)]

感谢您的帮助!

def vote_sort(ls):
    firstIndex = -1
    for a, b in ls:
        # EXTRACT THE VOTES = b
        firstIndex += 1
        for index in range(firstIndex+1, len(ls)):
            # COMPARISON,SORT AND SWAP
            if ls[index][1] > b:
                temp = ls[index]
                ls[index] = ls[firstIndex]
                ls[firstIndex] = temp 
    print(ls)

vote_sort([("TOD",12),("Football",20),("Baseball",19),("Tennis",10)])
print(sorted(L, key=lambda k: k[1], reverse=True))

输出:

[('Football', 20), ('Baseball', 19), ('TOD', 12), ('Tennis', 10)]

编辑:

您询问了您的代码:主要问题是您如何处理外循环。在内部循环中 b 改变了它的位置,但是你一直在和它比较。例如,在两个循环的第一次迭代中,b 的位置为 0,firstIndex 为 0,index 为 1。想象一下,您已经交换了,在内部循环的下一次迭代中,您得到 b 位于位置 1,firstIndex 仍然0,索引为2。然后你将比较元素1和2,但交换元素0和2。 您应该在外循环中不是按值迭代,而是按索引迭代。 如果您仍然喜欢编写自己的排序函数,我建议以您的代码为基础进行类似的操作:

def vote_sort(ls):
    for i in range(len(ls)):
        for j in range(i+1, len(ls)):
            if ls[i][1] > ls[j][1]:
                tmp = ls[i]
                ls[i] = ls[j]
                ls[j] = tmp

    print(ls[::-1])