赢博体育程序:排序一个整数列表

数据分析任务中的一个常见步骤是将数据值列表按升序排列。此步骤经常用作更复杂的数据分析任务的第一步。在这个例子中,我将开发一个简单的算法,它可以将整数列表按升序排序。

我要用的算法是排序中最简单的算法之一,选择排序算法。

以下是精选分类中主要思想的概要。

  1. 该算法将列表分为两部分,排序的部分和未排序的部分。
  2. 开始时,列表的已排序部分为空,未排序部分覆盖整个列表。
  3. 该算法以一系列回合的形式进行。在每一轮中,我们做以下事情:
    1. 在列表的未排序部分中搜索我们能找到的最小的数。
    2. 将最小的数字与未排序部分开头的数字交换位置。
    3. 将列表中已排序的部分展开1以容纳新数字,并将未排序的部分缩小1
  4. 该算法将继续,直到未排序的部分为空,并且排序的部分覆盖整个列表。此时,列表已经排序完毕。

下面是该算法的实现。为方便起见,我将算法结构化为两个函数。函数sort()实现了完整的排序算法,而函数findSmallest()作为辅助函数来帮助sort()完成其工作。

deffindsmallest (list,start,end): ““”查找并返回列表list中位置开始和结束之间最小的数字的位置。”“” smallest = list [start] where esmallest = start for i in range(start+1,end):如果list [i] < smallest: smallest = list [i] where esmallest = i return where esmallest def sort(list): ““”用选择排序将list按升序排序。”“” for i in range(0,len(list)): where = findSmallest(list,i,len(list)) temp = list [i] list [i] = list [where] list [where] = temp data = [12,23,51,14,25,67,33,46,60,89] sort(data) for x in data: print(x)

Python中的排序

上面展示的排序算法是一个很好的示例,但是选择排序算法不够强大,无法用于对较长的列表进行排序。

对于较长的列表,你应该使用list sort()方法:

Data = [12,23,51,14,25,67,33,46,60,89] Data .sort()

该方法执行所谓的就地排序,这意味着原始列表中的元素被重新排列,以升序排列。

如果您出于某种原因想保留原始列表,Python提供了另一种方法来通过sorted()函数。这个函数接受一个列表作为参数,并返回一个新列表,其中原始元素按升序排序:

newList = [12, 23, 51, 14, 25, 67, 33, 46, 60, 89]

另一个经常出现的问题是对元组列表进行排序。这里有一个例子。假设您有一个元组列表,其中每个元组包含一个学生的姓名和他们在考试中取得的分数。

examScores = [(Kim, 87年),(‘安娜’,92年),(Leon, 89),(85年“肖恩”))

如果在这个元组列表上使用sort()或sorted()方法,Python将使用元组中的第一个条目自动对数据项进行排序。也就是说,数据将按照名称的升序进行排序。

byName = sorted(examScores)

Python提供了一种基于元组中的其他成员对元组进行排序的方法。这样做的第一步是构造一个称为键函数的特殊函数。这个函数接受一个数据元组作为参数,并返回元组中的成员,您希望使用该成员作为排序的基础。

defscorekey (score):返回得分[1]

为了按考试成绩而不是按名称排序分数,我们将key函数作为附加参数传递给sorted()函数。

byScore = sorted(examScores,key=scoreKey)