数据分析任务中的一个常见步骤是将数据值列表按升序排列。此步骤经常用作更复杂的数据分析任务的第一步。在这个例子中,我将开发一个简单的算法,它可以将整数列表按升序排序。
我要用的算法是排序中最简单的算法之一,选择排序算法。
以下是精选分类中主要思想的概要。
下面是该算法的实现。为方便起见,我将算法结构化为两个函数。函数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)
上面展示的排序算法是一个很好的示例,但是选择排序算法不够强大,无法用于对较长的列表进行排序。
对于较长的列表,你应该使用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)