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把一个函数作用在一个序 ...
随机推荐
- JavaScript_正则表达式
[规则]开头结尾 "^The":表示所有以"The"开始的字符串("There","The cat"等): ...
- 在win7虚拟机中装sql server---待整理
本科学数据库的时候,为了做作业,需要在自己电脑上装sql server.但是每次都装不上,总是有各种小问题通不过.最后问学长,才采用了在虚拟机里装数据库的方法,在虚拟机中可以不用担心弄乱本机系统. 为 ...
- nginx页面不能正常访问排除方法
nginx页面不能访问 nginx页面不能访问 检查服务端服务是否启动成功 在服务端使用wget和curl测试下返回的是否正常 浏览器wget或者curl等软件访问不了Ngixn页面 1. 检查服务端 ...
- React 16.3.0 发布,构建用户界面的 JavaScript 库
React 16.3.0 已发布,React 是 Facebook 推出的一个为数据提供渲染为 HTML 视图,用来构建用户界面的开源 JavaScript 库. React 视图通常采用包含以自定义 ...
- IDEA的Tomcat配置Web的项目创建以及Servlet简单运行。
相关软件: 1.IDEA编译器 2.JDK 3.Tomcat (相关软件都可以到官网上下载,老表提示:不要下载最新版本因为不要做试验品) IDEA的安装非常简单,找好安装的盘,n ...
- day5-os、sys模块
一.概述 开发运维相关支撑系统现今已成为Devops下的一大热门领域,Python在这方面也有着自己独到的优势.这类场景以及其他一些场景下,需要调用一些操作系统的接口,这就涉及到今天要讲述的OS模块和 ...
- C++复习14 构造函数初始化调用顺序
1.关于构造函数初始化调用顺序的问题. 首先是父类和子类的,首先调用父类的构造函数,然后调用子类的构造函数.但是对于子类中有其他类型的数据成员的时候,会在调用该类的构造函数之前,调用其数据成员的构造函 ...
- C# 打开TXT文件读取内容
控制关键字,有些关键字发短信发不出来,比如(金融)需要转化为(金.融) 要求:读取敏感字的,并且替换掉 using : using System.Collections.Generic;using S ...
- iOS二维码、条形码生成(可指定大小、颜色)
一.前言: iOS7.0之后可以利用系统原生 API 生成二维码, iOS8.0之后可以生成条形码, 系统默认生成的颜色是黑色. 在这里, 利用以下方法可以生成指定大小.指定颜色的二维码和条形码, 还 ...
- FCT test device