在python程序中,我们往往自始至终都在与序列(列表、字典、元组)打交道,而最常用的操作就是对序列排序了。在此简单总结一下python中的排序。

  • 基本排序方法

在python中,list对象具有 sort( ) 方法,该方法对list中的元素重拍,修改list本身。同时,python中还有一个 sorted( ) 函数,可以对任意的Iterator(关于Iterator的介绍请看这里)排序,该函数构建一个新的list来返回排序结果,不修改Iterator本身。

最简单的,我们可以直接调用sorted函数,递增排序,注意,sorted( ) 函数返回一个新的list

  1. >>> sorted([5, 2, 3, 1, 4])
  2. [1, 2, 3, 4, 5]

对于list对象,可以直接调用它的 sort( ) 方法,该方法直接修改list本身(返回None)。

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

一般情况下,我们使用 sorted( ) 函数,因为它可以作用于任何Iterator,并且不修改Iterator本身。

  1. >>> sorted({2: 'D', 1: 'B', 3: 'B', 4: 'E', 5: 'A'})
  2. [1, 2, 3, 4, 5]
  • Key 函数的使用      list.sort() 和 sorted() 都可以加入参数key 来指定一个函数作用于list中的每一个项用来做比较.

例如按照字母的大小顺序做比较:

  1. >>> sorted("This is a test string from Andrew".split(), key=str.lower)
  2. ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

还有一种经常使用的方法是利用对象中的某个元素。

例如:

  1. >>> student_tuples = [
  2. ('john', 'A', 15),
  3. ('jane', 'B', 12),
  4. ('dave', 'B', 10),
  5. ]
  6. >>> sorted(student_tuples, key=lambda student: student[2]) # sort by age
  7. [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
  1.  
  • 升序和降序
  1.  

list.sort( ) 和 sorted( ) 两个方法中都接受一个布尔参数reverse,来确定升序排序还是降序排序

  1.  
  1. >>> a=[3,4,1,5,2]
  2. >>> sorted(a,reverse=True)
  3. [5, 4, 3, 2, 1]
  4. >>> sorted(a)
  5. [1, 2, 3, 4, 5]
  • 下面是C语言中常见的两种排序方法:

冒泡排序:

def ballpop(list):
i=0
j=0
mid =0
for i in range(len(list)-1,0,-1):
  for j in range(0,i):
    if list[j]>list[j+1]:
      mid=list[j+1]
      list[j+1]=list[j]
      list[j]=mid
print list

list = [15,10,23,6,11,105,70,2,54,21,8]
ballpop(list)

 用sort一句话,list.sort(),print list 

插入排序:

def insert(x,n):
  i=1
     while i<n-1:
         key=x[i]
         j=i-1
        while j>=0 and key<x[j]:
            x[j+1]=x[j]
            j-=1
           x[j+1]=key
       i+=1
return x

  1. print select([1,10,2,5,41,25,3,48],8) #[1, 2, 3, 5, 10, 25, 41, 48]

python的常见排序的更多相关文章

  1. python 的常见排序算法实现

    python 的常见排序算法实现 参考以下链接:https://www.cnblogs.com/shiluoliming/p/6740585.html 算法(Algorithm)是指解题方案的准确而完 ...

  2. 用Python实现常见排序算法

    最简单的排序有三种:插入排序,选择排序和冒泡排序.这三种排序比较简单,它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了.贴出来源代码. 插入排序: def insertion_sort( ...

  3. python实现常见排序算法

    #coding=utf-8from collections import deque #冒泡排序def bubblesort(l):#复杂度平均O(n*2) 最优O(n) 最坏O(n*2) for i ...

  4. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

  5. python常见排序算法解析

    python——常见排序算法解析   算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...

  6. python——常见排序算法解析

    算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...

  7. Python:常见错误集锦(持续更新ing)

    初学Python,很容易与各种错误不断的遭遇.通过集锦,可以快速的找到错误的原因和解决方法. 1.IndentationError:expected an indented block 说明此处需要缩 ...

  8. python基础===Python 代码优化常见技巧

    Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...

  9. Python之常见算法介绍

    一.算法介绍 1. 算法是什么 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输 ...

随机推荐

  1. Null和Undefined类型

    Null和Undefined类型都只有唯一的特殊值,即null和undefined.不过null是关键字而undefined不是. JavaScript把两者定义为相等的,如下代码可以验证: aler ...

  2. 报表生成之Hyperion SQR

    SQR(Structured Query Reporter)是为从数据库管理系统生成报告而设计的一种编程语言.名称是结构化查询报告的缩写,这表明它与SQL(结构化查询语言)的关系.任何SQL语句可以嵌 ...

  3. QBuffer简单操作(被看做一个标准的可随机访问的文件,支持信号)

    Qt中通过QBuffer类我们可以使用io的方式访问.操作QByteArray中的内容.此时,QByteArray被看做一个标准的可随机访问的文件.例如: QBuffer buffer; char c ...

  4. Vue.js之组件嵌套小demo

    Vue.js之组件嵌套的小demo项目 第一步:初始化一个wabpack项目,这里不在复述.第二步:在components文件夹下新建Header.vue Footer.vue和Users.vue三个 ...

  5. python实现复制整个目录的方法

    import shutil #复制文件 shutil.copyfile('listfile.py', 'd:/test.py') #复制目录 shutil.copytree('d:/temp', 'c ...

  6. (1)sql server 同网段复制

    转自:https://blog.csdn.net/hliq5399/article/details/51678774(文末有复制系列文章链接) 一.背景 在复制的运用场景中,事务发布是使用最为广泛的, ...

  7. Guide to Spring @Autowired

    Guide to Spring @Autowired Spring希望由@Autowired注解的依赖在某个依赖bean被构造时是可以访问的.如果框架不能解析这个用于wiring的bean,就会抛出异 ...

  8. PAT 天梯赛 L1-027. 出租 【模拟】

    题目链接 https://www.patest.cn/contests/gplt/L1-027 题意 给出一串电话号码,找出其中不同数字的个数,并且按递减顺序排列,然后 有一个index 数组,指出每 ...

  9. Word内容修改,以及转PDF

    Word模板内容修改 1.java代码 package com.sicdt.sicsign.web.utils; import java.io.ByteArrayInputStream; import ...

  10. MyBatis传入多个参数 ,List集合

    一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...