1

我正在尝试获取一个函数,如果您执行 sort(listname),它将将该列表中的所有数字从最小到最大排序。

我不确定我的有什么问题,但我需要一些帮助,因为输出实际上并不是最小到最大,它对于数字的前两个数字的作用最小到最大。

例子 :

如果列表中有 23、212、44,那么我对其进行排序,输出将是这样的。

输出 :

212,23,44

应该是23、44、212 。

代码:

def sort(my_list):
    size = len(my_list)
    for i in range(size):
        for j in range(size-i-1):
            if(my_list[j] > my_list[j+1]):
                tmp = my_list[j]
                my_list[j] = my_list[j+1]
                my_list[j+1] = tmp

更多代码:

numbers=([])
amount=input("How many numbers are in your list? ")
print("")
counter = 0
ran = 0
while counter < int(amount):
    counter = counter + 1
    ran = ran + 1
    num3 = input(str(ran) + ". Input: ")
    try:
       val = int(num3)
    except ValueError:
       num3 = input(str(ran) + ". Input: ")
    sort(numbers)
    numbers.append(num3)
4

3 回答 3

4

看起来您的列表不包含任何数字,而是字符串。Python 不会尝试猜测这些字符串中可能包含的内容,因此您会得到一个奇怪的排序顺序。

你有两个选择:

  1. 在比较它们之前将列表元素转换为int( if(int(my_list[j]) > int(my_list[j+1])):)
  2. 搜索此站点python natural sort以获取如何在 Python 中实现“自然排序”的答案。
于 2013-10-29T16:01:14.627 回答
3

如果您只想对其进行排序,请使用 sorted:

sorted_my_list = sorted(my_list,key=int)

或者对它进行排序,就地,使用

my_list.sort(key=int)

如果要修复程序,请将 my_list 转换为整数或至少比较整数

if ( int(my_list[j]) > int(my_list[j+1])):

此外,您可以在一个语句中交换两个变量:

my_list[j],my_list[j+1] = my_list[j+1],my_list[j]
于 2013-10-29T16:05:16.360 回答
0

我刚刚使用了您的代码(只是添加了一条return语句)。它返回预期值:

def sort(my_list):
    size = len(my_list)
    for i in range(size):
        for j in range(size-i-1):
            if(my_list[j] > my_list[j+1]):
                tmp = my_list[j]
                my_list[j] = my_list[j+1]
                my_list[j+1] = tmp
    return my_list # Note I added this return statement

print sort([23,212,44])
>>> 
[23, 44, 212]
于 2013-10-29T16:00:16.023 回答