Python要如何实现列表排序的几种方法


Posted in Python onFebruary 21, 2020

排序,是许多编程语言中经常出现的问题。同样的,在Python中,如何是实现排序呢?(以下排序都是基于列表来实现)

一、使用Python内置函数进行排序

Python中拥有内置函数实现排序,可以直接调用它们实现排序功能

Python 列表有一个内置的 list.sort() 方法可以直接修改列表。还有一个 sorted() 内置函数,它会从一个可迭代对象构建一个新的排序列表。

1.sort()函数:

list.sort(cmp=None, key=None, reverse=False)

其中参数的含义是:

cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。

默认输入列表就可以排序,例如:

list=[1,2,4,5,3]
list.sort()
print(list)
>>>[1,2,3,4,5]

2.sorted()函数:

sorted(iterable, cmp=None, key=None, reverse=False)

其中:

iterable -- 可迭代对象。

cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

同样的,使用sorted()函数可以对列表进行排序,例如:

list=[1,2,4,5,3]
print(sorted(list))
>>>[1,2,3,4,5]

sort()和sorted()虽然相似,都可以实现排序功能,但是它们有很大的不同:

sort ()与sorted()区别:

sort() 是应用在 list 上的方法,sorted() 可以对所有可迭代的对象进行排序操作。

list 的 sort() 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted() 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

列表的翻转(reverse)、升序(sort)、降序(sorted),按长度排列的用法 

list4 = [10,10,50,20,30,60,51,20,10,10]
print(list4)
list4.reverse()               #翻转
print(list4)
 
list4.sort()
print(list4)            #升序排列,直接对表进行操作
 
list4.sort(reverse=True)
print(list4)            #降序排列
 
list41 = [10,10,50,20,30,60,51,20,10,10]
print(sorted(list41))        #升序排列,生成一个新表
print(list41)
 
print(sorted(list41,reverse=True)) #降序排列,从之前的列表中挑选出元素组成新的表
print(list41) 
 
list43 = ["fddg","gfdggfg","f"]  #按照长度进行排序,生成新的列表
print(sorted(list43,key=len))

二、使用常用的排序算法进行排序

同其他高级函数一样,Python也可以使用算法,利用一般语句进行排序。

1.冒泡排序

冒泡排序是最常见到的排序算法,也是很基础的一种排序算法。它的实现思想是:相邻的两个元素进行比较,然后把较大的元素放到后面(正向排序),在一轮比较完后最大的元素就放在了最后一个位置,像鱼儿在水中吐的气泡在上升的过程中不断变大,

def bubble_sort(list):
  count = len(list)
  for i in range(count):
    for j in range(i + 1, count):
      if list[i] > list[j]:
        list[i], list[j] = list[j], list[i]
  return list

2.选择排序

选择排序的思路是:第一轮的时候,所有的元素都和第一个元素进行比较,如果比第一个元素大,就和第一个元素进行交换,在这轮比较完后,就找到了最小的元素;第二轮的时候所有的元素都和第二个元素进行比较找出第二个位置的元素,以此类推。

def selection_sort(list):
  length = len(list)
  for i in range(length - 1, 0, -1):
    for j in range(i):
      if list[j] > list[i]:
        list[j], list[i] = list[i], list[j]
    return list

3.插入排序

插入排序的思想是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。 是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置), 而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中

def insert_sort(list):
  count = len(list)
  for i in range(1, count):
    key = list[i]
    j = i - 1
    while j >= 0:
      if list[j] > key:
        list[j + 1] = list[j]
        list[j] = key
      j -= 1
  return list

4.快速排序

快速排序的思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

def quick_sort(list, left, right): 
  if left >= right:
    return list
  key = lists[left]
  low = left
  high = right
  while left < right:
    while left < right and list[right] >= key:
      right -= 1
    lists[left] = lists[right]
    while left < right and list[left] <= key:
      left += 1
    list[right] = list[left]
  list[right] = key
  quick_sort(list, low, left - 1)
  quick_sort(list, left + 1, high)
  return list

lst1 = raw_input().split()#调用函数
lst = [int(i) for i in lst1]
#lst = input()
quick_sort(lst,0,len(lst)-1)
for i in range(len(lst)):
  print lst[i],

5.希尔排序

希尔排序是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少, 每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

def shell_sort(list):
  count = len(list)
  step = 2
  group = count / step
  while group > 0:
    for i in range(group):
      j = i + group
      while j < count:
        k = j - group
        key = list[j]
        while k >= 0:
          if list[k] > key:
            list[k + group] = list[k]
            list[k] = key
          k -= group
        j += group
    group /= step
  return list

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
python解决方案:WindowsError: [Error 2]
Aug 28 Python
python下载图片实现方法(超简单)
Jul 21 Python
python利用lxml读写xml格式的文件
Aug 10 Python
使用python对excle和json互相转换的示例
Oct 23 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
python使用requests模块实现爬取电影天堂最新电影信息
Apr 03 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
如何通过python检查文件是否被占用
Dec 18 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 Python
python入门学习关于for else的特殊特性讲解
Nov 20 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 #Python
使用Python打造一款间谍程序的流程分析
Feb 21 #Python
python实现堆排序的实例讲解
Feb 21 #Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 #Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
Feb 21 #Python
python编程进阶之异常处理用法实例分析
Feb 21 #Python
python编程进阶之类和对象用法实例分析
Feb 21 #Python
You might like
VFP与其他应用程序的集成
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/12/06 PHP
使用apache模块rewrite_module (转)
2007/02/14 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
Smarty变量用法详解
2016/05/11 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python实现身份证号码解析
2015/09/01 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
精彩广告词大全
2014/03/19 职场文书
新品发布会主持词
2014/04/02 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书
股权投资协议书
2016/03/23 职场文书