#python 排序的方法

#Python 列表有一个内置的 list.sort() 方法可以直接修改列表
list1 = [1,3,5,10,2,1]
list1.sort()
print(list1) list1 = [1,3,5,10,2,1]
list1.sort(reverse=True)
print(list1)

def sortLot(inputString):
    import re
    com = re.compile(r"\d+")
    mo = com.search(inputString)
    if mo.group() is None:
        print("nonnn")
    else:
        print(mo.group(0))
        return mo.group(0)
strings2 = ['lotID123shu',"lotID111shun2","lotID234shun3"]#按照这里面的数字来排序
strings2.sort(key=sortLot)#key代表着关键字, 表示用什么关键字来排序,所以sortLot函数只需要return出关键字就可以了
print(strings2)#['lotID111shun2', 'lotID123shu', 'lotID234shun3']

#python 排序的方法

#python还有一个 sorted() 内置函数,它会从一个可迭代对象构建一个新的排序列表。
#返回值是列表
list1 = [1,5,2,1,10]
newlist = sorted(list1,reverse=True)
print(newlist) #而 sorted() 函数可以接受任何可迭代对象。
print(sorted({1: 'D', 2: 'B', 10: 'B', 4: 'E', 5: 'A'}))# [1, 2, 4, 5, 10] #key 形参的值应该是个函数(或其他可调用对象),它接受一个参数并返回一个用于排序的键
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
print(sorted(student_tuples, key=lambda x: x[2]))

选择排序

#选择排序方法,假设无序的集合中, 第一个是最小的, 然后搜扫描剩下的集合,如果遇到比它还小的,那么久交换位置
#选择排序的基本思想就是每次寻找为排序集合里面的最小值
def selectSort(nums):
for i in range(len(nums)):
minIndex = i#假设第一个是最小的
for j in range(i+1,len(nums)):#扫描剩下的集合
if nums[j] < nums[minIndex]:#遇到比上面那个还小的, 就交换位置
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
#这样第一轮找下来, 就能知找到最下的值
#第二轮找下来就能找到第二小的值
return nums
print(selectSort([1,3,2,5]))

冒泡排序

def bubbleSort(a):
    length = len(a)
    for i in range(length):#第一次循环会找到最小的值, 经过交换位置之后,在内层循环结束的时候, 最大值会处于数组的末尾。每一次外层循环结束都会知道剩下未排序数组的最大值
        for j in range(length-i-1):#循环的时候,由于有j+1的存在, 所以只需要到length-i-1的边界条件
            if a[j] > a[j+1]:#遇到相邻位置更小的值就交换位置
                temp = a[j]
                a[j] = a[j+1]
                a[j+1] = temp
    return a
print(bubbleSort([1,3,2,5,0]))

list_num = [[25,18],[18,19],[12,20],[18,18]]
#key 指定一个参数的函数,用于从每个列表元素中提取比较键:key=str.lower。默认值为 None (直接比较元素)。
print(sorted(list_num,key = lambda x: x[0]))#按照第一个元素排序
print(sorted(list_num,key = lambda x: x[1]))#按照第二个元素排序
print(sorted(list_num,key = lambda x: (x[0],x[1])))#先按照第一个元素排序, 再按照第二个元素排序
print(sorted(list_num,key = lambda x: (x[1],x[0])))#先按照第二个元素排序,在按照第一个元素排序
"""
[[12, 20], [18, 19], [18, 18], [25, 18]]
[[25, 18], [18, 18], [18, 19], [12, 20]]
[[12, 20], [18, 18], [18, 19], [25, 18]]
[[18, 18], [25, 18], [18, 19], [12, 20]]
"""
from operator import itemgetter, attrgetter
print(sorted(list_num,key = itemgetter(0,1)))#先按照第一个元素排序, 再按照第二个元素排序
print(sorted(list_num,key = itemgetter(1,0)))#先按照第二个元素排序,在按照第一个元素排序
 
"""

[[12, 20], [18, 19], [18, 18], [25, 18]]
[[25, 18], [18, 18], [18, 19], [12, 20]]
[[12, 20], [18, 18], [18, 19], [25, 18]]
[[18, 18], [25, 18], [18, 19], [12, 20]]
[[12, 20], [18, 18], [18, 19], [25, 18]]
[[18, 18], [25, 18], [18, 19], [12, 20]]

"""

python 排序的几种方式(内置排序函数, 选择排序, 冒泡排序)的更多相关文章

  1. Python descriptor 以及 内置property()函数

    Python Descriptor  1, Python Descriptor是这样一个对象 它按照descriptor协议, 有这样的属性之一 def __get__(self, obj, type ...

  2. python面向对象的多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04

    多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以 ...

  3. 最全总结!聊聊 Python 发送邮件的几种方式

    1. 前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大 ...

  4. Python中字符串String的基本内置函数与过滤字符模块函数的基本用法

    Python中字符串String的基本内置函数与用法 首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符 ...

  5. Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式

    1. 前言 发送邮件,我们在平时工作中经用到,做为测试人员,在自动化测试中用的也比较多,需要发送邮件给某领导 SMTP是Python默认的邮件模块,可以发送纯文本.富文本.HTML 等格式的邮件 今天 ...

  6. 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用

    2018年3月19日 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5 ...

  7. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                     优点:输入一行代码立刻返回结果                      缺点:无法永久保存代码 方法二: ...

  8. 执行python解释器的两种方式

    执行python解释器的两种方式 1.交互式 python是高级语言,是解释型语言,逐行翻译,写一句翻译一句 print ('hello world') 2.命令行式 python和python解释器 ...

  9. 操作系统+编程语言的分类+执行python程序的两种方式+变量

    1.什么是操作系统? 操作系统就是一个协调\管理\控制计算机硬件资源与软件资源的一个控制程序. 2.为何要操作系统? a.把复杂的硬件操作封装成简单的功能\接口用来给用户或者程序来使用(文件) b.把 ...

  10. day05-1 执行Python程序的两种方式

    目录 执行Python程序的两种方式 第一种:交互式 第二种:命令行式 三个步骤 两种方式的区别 执行Python程序的两种方式 第一种:交互式 在cmd中运行 优点:直接给出结果,执行效率高,及时报 ...

随机推荐

  1. openEuler 部署Kubernetes(K8s)集群

    前言 由于工作原因需要使用 openEuler,openEuler官方文档部署K8s集群比较复杂,并且网上相关资料较少,本文是通过实践与测试整理的 openEuler 22.03 部署 Kuberne ...

  2. Faster RCNN论文阅读

    引言 当前最先进的目标检测模型是由区域提案方法和基于区域的卷积神经网络引领的,由于共享计算,卷积网络花费的时间已经大大减小了,所以当前检测系统的瓶颈就是如何减小区域提案生成部分的花费时间.当前流行的区 ...

  3. Hadoop详解(10) - Hadoop HA高可用

    Hadoop详解(10) - Hadoop HA高可用 HA概述 HA(High Availablity),即高可用(7*24小时不中断服务). 实现高可用最关键的策略是消除单点故障.HA严格来说应该 ...

  4. 关系数据库——MySQL

    数据库 1.基本操作 1.1命令行操作 mysql -u username -p+password; --连接数据库 flush privileges; --刷新权限 show databases; ...

  5. Mac上优秀的虚拟机软件推荐 PD Parallels Desktop 18.1.1

    APPERK 软件信息 软件名称 ParallelsDesktop 版本号 18.1.1 软件类型 官网版 + 商业版 安装包大小 390MB 语言 中文 系统支持 macOS11及以上(M芯片原生) ...

  6. 将IoTdb注册为Windows服务

    昨天写的文章<Windows Server上部署IoTdb 集群>,Windows下的InfluxDB是控制台程序,打开窗口后,很容易被别人给关掉,因此考虑做成Windows服务,nssm ...

  7. DOM的操作(增删改查)

    操作DOM的核心就是增删改查 目录 一.节点创建型API 1.1 createElement 1.2 createTextNode 1.3 cloneNode 1.4 createDocumentFr ...

  8. 结构型模式 - 组合模式Composite Pattern

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 组合模式的定义与特点  组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式, ...

  9. SpringBoot实现电子文件签字+合同系统

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  10. React组件渲染触发的条件-归纳总结

    一.React组件何时发生渲染--何时会生成React元素? React组件的渲染发生在两个阶段. 1. 组件挂载. 2. 组件更新. 二.React组件更新的触发条件是什么? 对没有实现should ...