显示(打印)排序列表python(不使用list.sort)

时间:2014-03-18 18:00:28

标签: python list sorting python-3.x input

练习函数我创建了一个函数来对数字列表进行排序(Python 3.x):

def insertion_sort(list):
    for index in range(1, len(list)):
        value = list[index]
        i = index -1
        while i >= 0:
            if value < list[i]:
                list[i+1] = list[i]
                list[i] = value
                i = i - 1
            else:
                break

使用python解释器我得到了这个:

>>> a = [5,3,7,9,1,8,6,2,4]
>>> insertion_sort(a)
>>> print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

如果在python解释器中使用这个函数效果很好但是我想做更多并使用输入法来“询问”数字,所以我这样做了......

a = input("Enter a list of numbers separated by a comma: ")
c = set(a)
b = []
b.append(c)
insertion_sort(b)
print (b)

当我运行代码并输入数字537918624时,我得到了这个:

[{'8', '9', '2', '3', '1', '6', '7', '4', '5'}]

为什么不对它进行排序?如何在没有引号的情况下打印列表?

1 个答案:

答案 0 :(得分:0)

引号表示您的集合中有字符串,而不是整数。 input会一直给你一个字符串;您可以使用int()将字符串转换为整数。

此外,您正在为排序功能提供一个列表,其中包含一个项目set。使用单个项目对列表进行排序没有任何意义。

我会按如下方式处理:

ui = input(...) # take input e.g. "1, 2, 3"
numbers = list(map(int, ui.split(","))) # turn to list of ints [1, 2, 3]
insertion_sort(numbers) # sort the list

没有必要使用set - 如果有重复的数字,您的排序算法应该能够管理它。

您输入的内容没有逗号 - 我假设(根据提示!)用户应该输入例如: 5,3,79,...

最后,请注意,您不应该将参数调用insertion_sort list,因为这会影响内置。