Python基础知识之排序法
在Python开发中,我们会经常使用到排序法,排序的最简单的方法是用sort(list)函数,它接受一个列表并返回与有序的元素一个新的列表。 原始列表不被改变。
a = [5, 1, 4, 3]
print sorted(a) ## [1, 3, 4, 5]
print a ## [5, 1, 4, 3]
这是最常见的传递一个列表到sort()函数,但实际上它可以作为输入任何类型的可迭代的集合。 旧list.sort()方法是下面详述的替代方案。 sort()函数似乎更容易使用比排序(),所以我建议使用排序()。
排序()函数可虽然可选的参数进行自定义。 sort()可选参数反向= TRUE,如sort(list中,反向= TRUE),使得它的排序倒退。
strs = ['aa', 'BB', 'zz', 'CC']
print sorted(strs) ## ['BB', 'CC', 'aa', 'zz'] (case sensitive)
print sorted(strs, reverse=True) ## ['zz', 'aa', 'CC', 'BB']
自定义排序使用按键=
对于更复杂的自定义排序,排序()有一个可选的“钥匙=”指定“键”功能,比较之前将每个元素。 键功能发生在1值,并返回值1,并返回的“代理”值被用于排序内的比较。
例如用字符串列表,指定键= LEN(内建的len()函数)按长度排序的琴弦,从短到长。 排序调用的len()为每个字符串以得到代理长度值的列表,以及各种与这些代理值。
strs = ['ccc', 'aaaa', 'd', 'bb']
print sorted(strs, key=len) ## ['d', 'bb', 'ccc', 'aaaa']

再举一个例子,指定“str.lower”为主要功能是一种强制排序对待大写和小写是一样的:
## "key" argument specifying str.lower function to use for sorting
print sorted(strs, key=str.lower) ## ['aa', 'BB', 'CC', 'zz']
您也可以在自己的MyFn传递的关键功能,就像这样:
## Say we have a list of strings we want to sort by the last letter of the string.
strs = ['xc', 'zb', 'yd' ,'wa']
## Write a little function that takes a string, and returns its last letter.
## This will be the key function (takes in 1 value, returns 1 value).
def MyFn(s):
return s[-1]
## Now pass key=MyFn to sorted() to sort by the last letter:
print sorted(strs, key=MyFn) ## ['wa', 'zb', 'xc', 'yd']
要使用key =自定义排序,请记住,你提供了一个功能,它有一个值,并返回代理值来指导排序。 还有一个可选的参数“CMP = cmpFn”来排序(),指定一个传统的两个参数的比较函数,它从列表中两个值,返回负/ 0 /积极表明自己的排序。 在字符串,整数比较功能内置,...是CMP(A,B),所以经常要拨打CMP()在您的自定义比较。 较新的一个参数键=排序是一般可取。
sort()方法
作为一种替代排序(),排序()方法对列表排序,列出升序排列,如list.sort()。 该sort()方法改变了底层列表并返回None,所以用这样的:
alist.sort() ## correct
alist = blist.sort() ## NO incorrect, sort() returns None
以上是用sort()一个非常普遍的误解 - 它*不返回*的排序列表。 该sort()方法必须调用列表上; 它没有任何枚举集合工作(但高于排序()函数适用于任何东西)。 该sort()方法早排序()函数,所以你可能会看到它在旧的代码。 排序()方法并不需要创建一个新的列表,所以可以在这些元素进行排序已经在列表的情况下快一点。
元组
元组是元件,诸如一个(X,Y)坐标的一固定大小的分组。 元组就像名单,除非他们是不变的,不会改变大小(元组是不是严格不变的,因为所包含的要素之一可能是可变的)。 元组起到一种“结构”Python中的角色 - 一个方便的方法来绕过一个小逻辑,固定的尺寸值的包。 需要返回多个值的函数可以只返回值的元组。 例如,如果我想有三维坐标列表,自然蟒蛇表示是元组的列表,其中每个元组的大小为3拿着一(X,Y,Z)组。
要创建一个元组,只列出括号用逗号隔开中的值。 “空”的元组仅仅是一对空括号。 在一个元组访问元素就像一个清单 - LEN()[],因为,在等所有的工作一样。
tuple = (1, 2, 'hi')
print len(tuple) ## 3
print tuple[2] ## hi
tuple[2] = 'bye' ## NO, tuples cannot be changed
tuple = (1, 2, 'bye') ## this works
要创建一个大小1元组,独行元素必须跟一个逗号。
tuple = ('hi',) ## size-1 tuple
它在语法一个有趣的案例,但逗号是必要的元组从投入括号表达式的普通情况区分开来。 在某些情况下可以省略括号和Python将从您打算元组的逗号看到。
指定一个元组变量名的相同大小的元组指定所有相应的值。 如果元组是不相同的大小,它抛出一个错误。 此功能对列表也可以。
(x, y, z) = (42, 13, "hike")
print z ## hike
(err_string, err_code) = Foo() ## Foo() returns a length-2 tuple
list解析(可选)
列表内涵是一种更先进的功能,这对于某些情况下很好,但并不需要练习,而不是你需要学习的东西第一次(即你可以跳过这一节)。 列表解析就是编写扩展到整个列表的表达式紧凑的方式。 假设我们有一个列表NUMS [1,2,3],这里是列表解析来计算他们的正方形的列表[1,4,9]:
nums = [1, 2, 3, 4]
squares = [ n * n for n in nums ] ## [1, 4, 9, 16]
语法[ expr for var in list ] -在for var in list看起来像一个普通的for循环,但没有冒号(:)。 该EXPR其左侧为每个元素赋予值新列表计算一次。 下面是字符串,其中每个字符串改为以大写字母的例子'!“ 附:
strs = ['hello', 'and', 'goodbye']
shouting = [ s.upper() + '!!!' for s in strs ]
## ['HELLO!!!', 'AND!!!', 'GOODBYE!!!']
您可以添加,如果考到for循环的权利,缩小的结果。 if测试对每个元件进行评估,包括只在所述测试为真的元素。
## Select values <= 2
nums = [2, 8, 1, 6]
small = [ n for n in nums if n <= 2 ] ## [2, 1]
## Select fruits containing 'a', change to upper case
fruits = ['apple', 'cherry', 'bannana', 'lemon']
afruits = [ s.upper() for s in fruits if 'a' in s ]
## ['APPLE', 'BANNANA']
Python基础知识之排序法的更多相关文章
- Python基础知识总结笔记(四)函数
Python基础知识总结笔记(四)函数python中的函数函数中的参数变量作用域偏函数PFA递归函数高阶函数BIFs中的高阶函数匿名函数lambda闭包Closure装饰器Decorator函数式编程 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- python基础知识小结-运维笔记
接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...
- Python基础知识(五)
# -*- coding: utf-8 -*-# @Time : 2018-12-25 19:31# @Author : 三斤春药# @Email : zhou_wanchun@qq.com# @Fi ...
- python基础知识的学习和理解
参考链接:https://github.com/yanhualei/about_python/tree/master/python_learning/python_base python基础知识笔 ...
- python基础知识(二)
以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍
- python 基础知识(一)
python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...
- python基础知识讲解——@classmethod和@staticmethod的作用
python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
随机推荐
- CSS3中的伪类选择器详解
类选择器和伪类选择器区别 类选择器我们可以随意起名,而伪类选择器是CSS中已经定义好的选择器,不可以随意起名. 伪类选择器以及伪元素 我们把它放到这里 p.aaas{ text-align: le ...
- away3D改造白皮书
[多余的stage3D的考虑] 因为away3D为了支持stage本身可以有n个stage3D对象这个特性,在诸如MaterialPassBase.SubGeometry中,为Program3D.Ve ...
- iOS TextField用法大全
//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...
- Forward和Redirect的区别
一:间接请求转发(Redirect) 二:直接请求转发(Forward) 用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求 ...
- SPSS数据分析—广义线性混合模型
广义线性混合模型是目前线性模型范畴内最为完备的模型框架,它是广义线性模型的进一步延伸,进一步突破适用条件,因变量既 可以非正态,也可以非独立,由于其最为复杂,因此SPSS对其输出结果采用模型格式,而不 ...
- ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名
连接excel odbc时发生如下问题: 是因为数据源(odbc)没有配置excel 驱动:控制面板->管理工具->数据源(ODBC): 添加: 如无效果,则可能是位数引起的,比如系统是6 ...
- 使用scanner工具类来获取用户输入的信息
使用scanner工具类来获取用户输入的成绩信息. 步骤:1.导入java.util.Scanner包 2.创建Scanner对象 3.接受并保存用户输入的值 例子:通过用户输入来获取学生成绩 pac ...
- sass1:
less在处理CSS动画时,非常恶心,决定转向sass了.sass诞生得比less早,只是因为它是ruby写的,因此受众面够少.但我们不需要自己下编译器或使用命令行,我们可以koala这神器 首先几个 ...
- 使用VS2012调试ReactOS源码
目录 一 下载并安装VS2012 二 下载并安装WDK80 三 下载ReactOS0315源码 四 下载并安装RosBE211 五 用RosBE命令行编译ReactOS源码 六 用VS2012编译nt ...
- 环境jdk、编码不一致造成的项目报错
一个项目在eclipse 中可以运行 , 到另一个eclipse 中不能运行,多是因为jdk过低.包没有引人.环境jdk.编码不一致造成的.或者是因为编译文件在另一个环境里跟JDK等 不匹配. 解决办 ...