python内置关于排序的工具主要有两个一个是列表自带的 sort() 方法,另外一个是 sorted() 函数。Python 列表内置方法可以直接修改列表。而 sorted() 内置函数从一个可迭代对象(列表,元组等都可以)构建一个新的排序列表。其函数原型分别如下:
10年积累的成都网站建设、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有托里免费网站建设让你可以放心的选择与我们合作。
对列表进行默认排序
从函数原型来看,可以看到两者都具有两个可选参数,它们都必须指定为关键字参数。
key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。默认值为 None (直接比较元素)。 key 形参的值应该是个函数(或其他可调用对象),它接受一个参数并返回一个用于排序的键。
假设有其他类型的变量,比如一个自定义的类或者列表中又是一个列表。以官网例子为例有这样一个列表,其元素为元组,
可以用以下方式按照年龄排序
类似的有自定义类
可以用如下方式进行排序
也可以显示定义一个函数,且只有一个参数,返回用于排序的键,比如
总之就是定义一个函数返回一个用于排序的键,可以用lambda函数或者 def 定义都可以。
上面实现的简单函数实际就是实现了返回一个有序结构的第 n 的元素,或者某个类中的某个属性,因此 Python 提供了便利功能,使访问器功能更容易,更快捷。operator 模块有 itemgetter() 、 attrgetter() 函数。分别完成返回第 n 个元素,某个属性功能。上面的排序可以用如下方式进行实现
在python2中,sort有一个 cmp 参数,即用一个函数来自定义比较,在python3中这种方式被取消。为了继承类似的用法,在 Python 3.2 中, functools.cmp_to_key() 函数被添加到标准库中的 functools 模块中。
这种作用先定义如何比较两个变量,以上面的学生列表按照年龄排序为例
这种做法自定义比较函数接收两个形参,返回比较结果(bool),而新式方法接受一个参数,返回的是比较的键。
假设有字典 d = {'b':2, 'a':1,'c':8,'d':4} ,则可以通过以下方式对字典按照键和值进行排序
仅限没有重复的情况。
gt;gt;gt; a=[1,2,3,4,5,6]
gt;gt;gt; b=[1,2,3]
gt;gt;gt; set(a)-set(b)
set([4, 5, 6])
如果要考虑重复的话,就有点麻烦了:
from math import fabs
def compare(list1,list2):
nbsp;nbsp;nbsp;dict1=dict()
nbsp;nbsp;nbsp;dict2=dict()
nbsp;nbsp;nbsp;total = list(set(list1+list2))
nbsp;nbsp;nbsp;dif = []
nbsp;nbsp;nbsp;for i in list1:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if str(i) in dict1:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dict1[str(i)] += 1
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;else:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dict1[str(i)] = 1
nbsp;nbsp;nbsp;for i in list2:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if str(i) in dict2:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dict2[str(i)] += 1
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;else:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dict2[str(i)] = 1
nbsp;nbsp;nbsp;for i in total:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if str(i) not in dict1 or str(i) not in dict2:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if str(i) in dict1:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;for num in range(int(dict1[str(i)])):
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dif.append(i)
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;else:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;for num in range(int(dict2[str(i)])):
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dif.append(i)
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;else:
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;count = fabs(int(dict1[str(i)])-int(dict2[str(i)]))
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;for num in range(int(count)):
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;dif.append(i)
nbsp;nbsp;nbsp;return dif
a=[1,1,1,1,2,3,4,4,4,5,6,7,8,9]
b=[2,2,2,2,3,4,4,4,4,5,6,7,8,9,10,11]
print compare(a,b)
python中sort()函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。
列表中的数据种类很多,有字符串,有整型,有其他列表的嵌套,还有更多的数据类型,这些数据在列表中往往是错乱的,没有一定的逻辑关系,但是我们在使用列表的时候往往需要按照一定的逻辑关系进行调用或检索。下面就来看看 列表是如何排序和翻转的 ,所谓翻转也就是把既定列表倒序排列。
返回结果:
从上面的返回结果可以看出来,sort()函数如果遇到字符串是按照首字母顺序进行排列的,如果遇到浮点型数据还是按照大小排列。
由上面的结果可以看出来,不同的数据类型是没有办法进行排列的。
这个方法是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排序整理。如果需要对列表中的参数进行整理,就需要用到列表的另一种排序方式sort正序排序。
Python语句list(range(1,10,3))执行结果为[1,4,7]。
语法是:range(start,stop[,step])
参数说明:
(1)start:计数从start开始,默认是从0开始。例如range(5)等价于range(0,5);
(2)stop:计数到stop结束,但不包括stop。例如:range(0,5)是[0,1,2,3,4]没有5;
(3)step:步长,默认为1。例如:range(0,5)等价于range(0,5,1)。
因此,range(1,10,3)的意思是1到10之间的tuple,间隔为3,所以结果是(1,4,7)。
列表(List)是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
所以,list(range(1,10,3))执行结果为[1,4,7]。
扩展资料
Python列表函数方法
Python包含以下函数:
1、cmp(list1, list2):比较两个列表的元素;
2、len(list):列表元素个数;
3、max(list):返回列表元素最大值;
4、min(list):返回列表元素最小值;
5、list(seq):将元组转换为列表。
Python包含以下方法:
1、list.append(obj):在列表末尾添加新的对象;
2、list.count(obj):统计某个元素在列表中出现的次数;
3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表);
4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置;
5、list.insert(index, obj):将对象插入列表;
6、list.pop([index=-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值;
7、list.remove(obj):移除列表中某个值的第一个匹配项;
8、list.reverse():反向列表中元素;
9、list.sort(cmp=None, key=None, reverse=False):对原列表进行排序。