python学习-序列排序
python的排序中,可以使用内置的sort()来对序列进行排序,也可以使用内置的sorted()函数对序列进行排序,区别是,当使用sort()时,是对原序列进行排序,而sorted()则是生成一个新的序列。
1、采用sorted()对序列进行排序,返回一个新的序列
#使用sorted()函数对序列进行排序
x = [5,2,3,1,4]
y = sorted(x)
print(y) #[1, 2, 3, 4, 5]
print(id(x)) #
print(id(y)) #
2、采用内置的sort()对序列进行排序,返回值为None,对原序列进行排序
#使用sort()对序列进行排序
a = [5,2,3,1,4]
a.sort()
print(a) #[1, 2, 3, 4, 5]
通常sort()并没有sorted()方便,但是当不需要原序列时,sort()也还可以。
从python2.4开始,list.sort()和sorted()增加了一个key参数,从而对排序规则进行定义
#定义key值对序列进行排序
lst = sorted('This is a test string from Andrew'.split(),key=str.lower)
print(lst) #['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
注意:key参数的值应该是一个函数,它接受一个参数并返回一个用于排序目的的键。 这种技术速度很快,因为每个输入记录只需要调用一次关键函数。
当需要对一些复杂的对象进行排序时,可以采用复杂对象里面的一些参数作为排序的参数:
#复杂对象的排序
student_tuple = [
('john','A',15),
('jane','B',12),
('dave','B',10),
]
lst = sorted(student_tuple,key=lambda student:student[2]) #按照年龄排序
print(lst) #[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
同样的技术适用于具有命名属性的对象:
#复杂对象的排序:
class Student:
def __init__(self,name,grade,age):
self.name = name
self.grade = grade
self.age = age
def __repr__(self):
return repr((self.name,self.grade,self.age))
def weighted_grade(self):
return 'CBA'.index(self.grade)/float(self.age)
student_objects = [
Student('john','A',15),
Student('jane','B',12),
Student('dave','B',10),
]
lst = sorted(student_objects,key=lambda student:student.age)
print(lst) #[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
上面采用的key值的方式对序列进行排序,在python中还提供更快更简单的排序函数,也就是operator模块,其中的itemgetter、attrgetter以及在python2.6中出现的methodcaller
未完待续
yang
python学习-序列排序的更多相关文章
- python学习-序列基本知识
序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. 用到的主要序列有元组和列表. 先定义一个列表 names=[&q ...
- python学习08排序算法举例
'''''''''排序算法:前提是所有数按照从小到大的顺序排列.1.冒泡算法将第一数与第二个数比较大小,如果第一个数比第二个数大,则沉底(交换位置,使大数在小数后面,这个过程类似于大泡沉底的过程) ' ...
- Python学习(三) 八大排序算法的实现(下)
本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
- Python学习一:序列基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...
- Python学习小技巧之列表项的排序
Python学习小技巧之列表项的排序 本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 典型代码1: data_list = [6, 9, 1, ...
- (私人收藏)python学习(游戏、爬虫、排序、练习题、错误总结)
python学习(游戏.爬虫.排序.练习题.错误总结) https://pan.baidu.com/s/1dPzSoZdULHElKvb57kuKSgl7bz python100经典练习题python ...
- Python学习_数据排序方法
Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2, ...
- python学习6
1.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. eg: 2. reduce把一个函数作用在一个序 ...
随机推荐
- codeforces600E Lomsat gelral
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 通过SSH key获取GitHub上项目,导入到IDEA中
1.在Windows上安装Git 在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可 安装完成后,在开始菜单里找到“Git”->“Git Bash”,或者在文 ...
- 第五章:异步Web服务
到目前为止,我们已经看到了许多使Tornado成为一个Web应用强有力框架的功能.它的简单性.易用性和便捷性使其有足够的理由成为许多Web项目的不错的选择.然而,Tornado受到最多关注的功能是其异 ...
- DLL_Delphi动态调用
1.动态调用DLL unit formMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Co ...
- C#多线程3种创建Thread、Delegate.BeginInvoke、线程池
1 创建多线程,一般情况有以下几种:(1)通过Thread类 (2)通过Delegate.BeginInvoke方法 (3)线程池 using System; using System.C ...
- jdk动态代理使用及原理
jdk动态代理的使用 1.创建实现InvocationHandler接口的类,实现invoke(Object proxy, Method method, Object[] args)接口,其中invo ...
- 二十六 Python分布式爬虫打造搜索引擎Scrapy精讲—通过downloadmiddleware中间件全局随机更换user-agent浏览器用户代理
downloadmiddleware介绍中间件是一个框架,可以连接到请求/响应处理中.这是一种很轻的.低层次的系统,可以改变Scrapy的请求和回应.也就是在Requests请求和Response响应 ...
- SVN更新操作提示需要清理操作,清理操作提示乱码,更新SVN失败
1.下载sqlite3.exe,下载方式如下: 1):sqlite网址:https://www.sqlite.org/download.html (根据操作系统自行下载) 2.下载的文件解压后将sql ...
- Ansible 小手册系列 二十(经常遇到的问题)
(1). 怎么为任务设置环境变量? - name: set environment shell: echo $PATH $SOME >> /tmp/a.txt environment: P ...
- day5-subprocess模块
一.概述 实际应用中,有些时候我们不得不跟操作系统进行指令级别的交互,如Linux中的shell.Python中早期通过os模块和commands模块来实现操作系统级别的交互,但从2.4版本开始,官方 ...