在 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])
似乎无法找出这里的问题:
我正在传递一个列表
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])