#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. STM32标准库中GPIO_ReadInputData与GPIO_ReadInputDataBit的区别

    GPIO_ReadInputData读的是GPIOx的整个IDR寄存器的数据,返回一个十六位数,对应IDR寄存器的十六位.反映GPIOx所有端口的电平状态,所以参数只用传入GPIOx. uint16_ ...

  2. C# Log4net配置文件 总结

    前言 因为项目日志太杂乱而且很大,打开一个就卡死了,何况用户电脑也扛不住日志积累,要做一个日志记录器管理日志.但对里面的配置有一些不熟悉(毕竟都是复制粘贴的),所以记录一下各个项的作用.方便后续复习. ...

  3. 记一次 .NET 某安全生产信息系统 CPU爆高分析

    一:背景 1.讲故事 今天是的第四天,头终于不巨疼了,写文章已经没什么问题,赶紧爬起来写. 这个月初有位朋友找到我,说他的程序出现了CPU爆高,让我帮忙看下怎么回事,简单分析了下有两点比较有意思. 这 ...

  4. CTFshow——funnyrsa1的wp理解

    题目如下: 题目分析: 拿到题,发现给的e不常规,p1和p2相等,有两个不同n,两个不同c和两个不同e.给定两个密文的情况下,通常需要找到两者之间存在的关系,"合并"密文求解才能得 ...

  5. [深度学习] caffe分类模型训练、结果可视化、部署及量化笔记

    本文为本人caffe分类网络训练.结果可视化.部署及量化具体过程的心得笔记.caffe目前官方已经停止支持了,但是caffe是目前工业落地最常用的深度学习框架,用的人挺多.其实主要怕自己忘了,弄个备份 ...

  6. [深度学习] tf.keras入门3-回归

    目录 波士顿房价数据集 数据集 数据归一化 模型训练和预测 模型建立和训练 模型预测 总结 回归主要基于波士顿房价数据库进行建模,官方文档地址为:https://tensorflow.google.c ...

  7. python进阶之路12之有参装饰器、多层语法糖、递归函数简介

    多层语法糖 def outter1(func1): print('加载了outter1') def wrapper1(*args, **kwargs): print('执行了wrapper1') re ...

  8. DVWA靶场实战(二)——Command Injection

    DVWA靶场实战(二) 二.Command Injection: 1.漏洞介绍: Command Injection,中文叫做命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令 ...

  9. iOS 使用xcode11新建项目

    1. 首先打开Xcode11,然后使用command + shift + n 快捷键创建一个新的工程 选择 Single View App   完成之后点击next 2. 会弹出 Choose opt ...

  10. Java入门与进阶 P-3.5+P-3.6

    计数循环 这个循环需要执行多少次? 循环停下来的时候,有没有输出到最后的0 ? 循环结束后count的值是多少 算数平方 让用户输入一系列的正整数,最后输入-1标识输入结束,然后程序计算出这些数字的平 ...