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

2024-09-29 19:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

^{1}$

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

^{pr2}$

我使用的代码是:

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来做这件事,但似乎不起作用。在

更新:感谢您到目前为止的输入。但是,我已经尝试过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

如果有更容易实现的方法,请告诉我。提前谢谢。干杯。


Tags: 文件代码in列表for排序defline
3条回答

Python列表已经提供了一个^{}方法。您可以简单地调用它,指定一个key参数来确定如何排序。在

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

with open(input("Enter file name: ")) as f:
    table = []
    for line in f:
        line = line.rstrip().split(",")
        line[0] = int(line[0])
        line[1] = float(line[1])
        table.append(line)

    table.sort(key=lambda line: line[1])
    print_list(table)

请注意,我对您的程序做了一些额外的更改,即根据PEP8重命名PrintList,并使用^{} statement使文件自动关闭。在

如果坚持使用选择排序(这将比Python的默认排序更糟糕),请在实现^{}接口的helper函数中实现它。在

在for循环之后:

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

Sorted_table现在包含按第2列排序的表格数据。 然后可以将sorted_table传递给PrintList函数。避免lambda的另一种选择:

^{pr2}$

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

是否必须执行选择排序?我会选择^{}

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

在哪里

^{pr2}$

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

相关问题 更多 >

    热门问题