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学习-序列排序的更多相关文章

  1. python学习-序列基本知识

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. 用到的主要序列有元组和列表. 先定义一个列表 names=[&q ...

  2. python学习08排序算法举例

    '''''''''排序算法:前提是所有数按照从小到大的顺序排列.1.冒泡算法将第一数与第二个数比较大小,如果第一个数比第二个数大,则沉底(交换位置,使大数在小数后面,这个过程类似于大泡沉底的过程) ' ...

  3. Python学习(三) 八大排序算法的实现(下)

    本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...

  4. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  5. Python学习一:序列基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7858473.html 邮箱:moyi@moyib ...

  6. Python学习小技巧之列表项的排序

    Python学习小技巧之列表项的排序 本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 典型代码1:     data_list = [6, 9, 1, ...

  7. (私人收藏)python学习(游戏、爬虫、排序、练习题、错误总结)

    python学习(游戏.爬虫.排序.练习题.错误总结) https://pan.baidu.com/s/1dPzSoZdULHElKvb57kuKSgl7bz python100经典练习题python ...

  8. Python学习_数据排序方法

    Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2, ...

  9. python学习6

    1.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. eg: 2. reduce把一个函数作用在一个序 ...

随机推荐

  1. 为什么我们选择parquet

    说明:此方案已经我们已经运行1年. 1.场景描述: 我们对客户登录日志做了数据仓库,但实际业务使用中有一些个共同点, A  需要关联维度表 B  最终仅取某个产品一段时间内的数据 C 只关注其中极少的 ...

  2. APP Inventor 基于网络微服务器的即时通信APP

    APP Inventor 基于网络微服务器的即时通信APP 一.总结 一句话总结:(超低配版的QQ,逃~) 1.APP Inventor是什么? google 傻瓜式 编程 手机 app App In ...

  3. VS2017编译项目出现提示al.exe运行失败的解决方法

    VS2013中编译一切正常,用VS2017打开项目,某个类库出现al.exe运行失败的解决方法,事件查看器中这样描述 “C:\Program Files (x86)\Microsoft SDKs\Wi ...

  4. Performance js

    转贴:https://10up.github.io/Engineering-Best-Practices/javascript/#performance Performance Writing per ...

  5. Svn Replacement For Git Stash

    svn 实现git stash类似的功能 % svn diff > WorkInProgress.txt % svn revert -R . <make changes> % svn ...

  6. 你真的掌握 LVS、Nginx 及 HAProxy 的工作原理吗

    你真的掌握 LVS.Nginx 及 HAProxy 的工作原理吗 当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web ...

  7. 转 Java对日期Date类进行加减运算一二三

    请移步,https://blog.csdn.net/hacker_lees/article/details/74351838 ,感谢博主分享

  8. jquery下跨域请求之代码示例

    场景描述: 在域A下异步获取B域下的接口: 实现方法: $.ajax({ url : (Q.lottery.serverTimeUrl || 'about:blank'), error : funct ...

  9. RMAN中format的参数

    (转自:http://blog.chinaunix.net/uid-23079711-id-2554290.html) format 的替换变量,注意大小写! 1.     %d --数据库的db_n ...

  10. ubuntu安装amd/ati显卡驱动

    原网页: http://forum.ubuntu.org.cn/viewtopic.php?f=126&t=390372 整合了几个帖子,大概如此:用以下命令卸载所有驱动: 代码: sudo ...