如何在列表中实现选择排序?

时间:2016-05-05 16:34:13

标签: python python-3.x selection-sort

所以我有一个.txt文件如下:

131,263.07
47,170.14
170,190.01
180,412.69
53,401.53

我必须阅读该文件,以便输出如下列表:

131 kms, $263.07
47 kms, $170.14
170 kms, $190.01
180 kms, $412.69
53 kms, $401.53

我使用的代码是:

def PrintList(table):
    for line in table:
       print(str(line[0]) + " kms, $" + str(line[1]))

file = open(input("Enter file name: ")) 

table = []
for line in file:
    line = line.rstrip().split(",")
    line[0] = int(line[0])
    line[1] = float(line[1])
    table.append(line)

PrintList(table)

file.close()

现在我想按照价格递增的顺序对列表进行排序:

47 kms, $170.14
170 kms, $190.01
131 kms, $263.07
53 kms, $401.53
180 kms, $412.69

我如何在Python中实现它?我已尝试使用Selection Sort执行此操作,但它似乎无法正常工作。

更新:感谢您到目前为止的输入。但是,我尝试了排序功能,但我想弄清楚如何使用Selection Sort来实现它。

更新:我无法发布我已经使用过的Selection Sort代码,因为我已经覆盖了它,但下面给出的代码示例(我用来排序)一个随机的距离列表)我必须修改以按价格递增的顺序对上述列表进行排序。希望它足够。

def selectionSort(distance):
    n = len(distance)
    for i in range(n):
        minPlace = searchMin(distance)
        swap(distance, i, minPlace+i)

def searchMin(distance):
    minPlace = 0
    n = len(distance)
    for i in range(1, n):
        if distance[i] < distance[minPlace]:
            minPlace = i
        return minPlace

def swap(distance, i, j):
    temp = distance[i]
    distance[i] = distance[j]
    distance[j] = temp

如果有更简单的方法来实现这一点,请告诉我们。提前致谢。欢呼声。

4 个答案:

答案 0 :(得分:1)

Python列表已经附带sort方法。您可以简单地调用它,指定0 6 8 14 参数以确定如何排序。

key

请注意,我对您的程序进行了一些其他更改,即根据PEP8重命名PrintList,并使用with statement以便文件自动关闭。

如果坚持使用Selection Sort(它会比Python的默认排序更糟糕),请在一个完成sorted接口的辅助函数中实现它。

答案 1 :(得分:0)

是否绝对有必要实施选择排序?我会选择sorted

PrintList(sorted(table, key = lambda x: x[1]))

,其中

key = lambda x: x[1]

指示sorted使用索引为1(价格)的元素的值来比较您的对象。

答案 2 :(得分:0)

在你的for循环之后

sorted_table = sorted(table, key=lambda row: row[1], reverse=True)

Sorted_table现在包含您的表格数据,按第2列排序。 然后,您可以将sorted_table传递给PrintList功能。一种避免lambda的替代方法:

from operator import itemgetter
sorted_table = sorted(table, key=itemgetter(1), reverse=True)

有关python排序的更多信息,请参阅:https://wiki.python.org/moin/HowTo/Sorting

答案 3 :(得分:0)

蛮力选择排序

lst = [56,2,5,3,6,4,7,1,8,10,34]
print(lst)

#Total length of the list
leng=len(lst)

#Loop from 1st to last of the list
for i in range(leng):
    #Assume first value as minimum 
    min = lst[i]
    print(min,'Minimum value before the for loop')
    #Scan through every value for checking the minimum 
    for j in range(i,leng):
        if lst[j] < min:          
            min=lst[j]
            ts=j
            print(min,"Minimum value", ts, "Is it's corresponding index")
    #We have now the new minimum value and it's corresponding index.
    #Swap the new minimum value and the corresponding index            
    if min <lst[i]:
         temp =lst[i]
         lst[i]=lst[ts]   
         lst[ts]=temp
    print(lst,'Outer list')