python多列排序函数 python多个列表排序

sorted函数python

sorted函数python介绍如下

成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、成都网站制作、常山网络推广、重庆小程序开发、常山网络营销、常山企业策划、常山品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供常山建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

sorted() 作为 Python 内置函数之一,其功能是对序列(列表、元组、字典、集合、还包括字符串)进行排序。

sorted() 函数的基本语法格式如下

list = sorted(iterable, key=None, reverse=False)

其中,iterable 表示指定的序列,key 参数可以自定义排序规则;reverse 参数指定以升序(False,默认)还是降序(True)进行排序。sorted() 函数会返回一个排好序的列表。

注意,key 参数和 reverse 参数是可选参数,即可以使用,也可以忽略。

演示sorted()函数的基本代码用法:

#对列表进行排序

a = [5,3,4,2,1]

print(sorted(a))

#对元组进行排序

a = (5,4,3,1,2)

print(sorted(a))

#字典默认按照key进行排序

a = {4:1,\

5:2,\

3:3,\

2:6,\

1:8}

print(sorted(a.items()))

#对集合进行排序

a = {1,5,3,2,4}

print(sorted(a))

#对字符串进行排序

a = "51423"

print(sorted(a))

python 内置排序函数使用

python内置关于排序的工具主要有两个一个是列表自带的 sort() 方法,另外一个是 sorted() 函数。Python 列表内置方法可以直接修改列表。而 sorted() 内置函数从一个可迭代对象(列表,元组等都可以)构建一个新的排序列表。其函数原型分别如下:

对列表进行默认排序

从函数原型来看,可以看到两者都具有两个可选参数,它们都必须指定为关键字参数。

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} ,则可以通过以下方式对字典按照键和值进行排序

如何对列表进行排序 python

很多时候,我们需要对List进行排序,Python提供了两个方法,对给定的List

L进行排序:

方法1.用List的成员函数sort进行排序

方法2.用built-in函数sorted进行排序(从2.4开始)

这两种方法使用起来差不多,以第一种为例进行讲解:

从Python2.4开始,sort方法有了三个可选的参数,Python

Library

Reference里是这样描述的

复制代码代码如下:

cmp:cmp

specifies

a

custom

comparison

function

of

two

arguments

(iterable

elements)

which

should

return

a

negative,

zero

or

positive

number

depending

on

whether

the

first

argument

is

considered

smaller

than,

equal

to,

or

larger

than

the

second

argument:

"cmp=lambda

x,y:

cmp(x.lower(),

y.lower())"

key:key

specifies

a

function

of

one

argument

that

is

used

to

extract

a

comparison

key

from

each

list

element:

"key=str.lower"

reverse:reverse

is

a

boolean

value.

If

set

to

True,

then

the

list

elements

are

sorted

as

if

each

comparison

were

reversed.In

general,

the

key

and

reverse

conversion

processes

are

much

faster

than

specifying

an

equivalent

cmp

function.

This

is

because

cmp

is

called

multiple

times

for

each

list

element

while

key

and

reverse

touch

each

element

only

once.

以下是sort的具体实例。

实例1:

复制代码代码如下:

L

=

[2,3,1,4]

L.sort()

L

[1,2,3,4]

实例2:

复制代码代码如下:

L

=

[2,3,1,4]

L.sort(reverse=True)

L

[4,3,2,1]

实例3:

复制代码代码如下:

L

=

[('b',2),('a',1),('c',3),('d',4)]

L.sort(cmp=lambda

x,y:cmp(x[1],y[1]))

L

[('a',

1),

('b',

2),

('c',

3),

('d',

4)]

实例4:

复制代码代码如下:

L

=

[('b',2),('a',1),('c',3),('d',4)]

L.sort(key=lambda

x:x[1])

L

[('a',

1),

('b',

2),

('c',

3),

('d',

4)]

实例5:

复制代码代码如下:

L

=

[('b',2),('a',1),('c',3),('d',4)]

import

operator

L.sort(key=operator.itemgetter(1))

L

[('a',

1),

('b',

2),

('c',

3),

('d',

4)]

实例6:(DSU方法:Decorate-Sort-Undercorate)

复制代码代码如下:

L

=

[('b',2),('a',1),('c',3),('d',4)]

A

=

[(x[1],i,x)

for

i,x

in

enumerate(L)]

#i

can

confirm

the

stable

sort

A.sort()

L

=

[s[2]

for

s

in

A]

L

[('a',

1),

('b',

2),

('c',

3),

('d',

4)]

以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List

item中的某一项

为比较关键字进行排序.

效率比较:

复制代码代码如下:

cmp

DSU

key

通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当

多关键字比较排序:

实例7:

复制代码代码如下:

L

=

[('d',2),('a',4),('b',3),('c',2)]

L.sort(key=lambda

x:x[1])

L

[('d',

2),

('c',

2),

('b',

3),

('a',

4)]

我们看到,此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用第二个关键字

排过序后再用第一个关键字进行排序呢?有两种方法

实例8:

复制代码代码如下:

L

=

[('d',2),('a',4),('b',3),('c',2)]

L.sort(key=lambda

x:(x[1],x[0]))

L

[('c',

2),

('d',

2),

('b',

3),

('a',

4)]

实例9:

复制代码代码如下:

L

=

[('d',2),('a',4),('b',3),('c',2)]

L.sort(key=operator.itemgetter(1,0))

L

[('c',

2),

('d',

2),

('b',

3),

('a',

4)]

为什么实例8能够工作呢?原因在于tuple是的比较从左到右之一比较的,比较完第一个,如果

相等,比较第二个

python列表排序方法

列表的sort方法就是用来进行排序的。

主要就是两个参数,key,reverse

先说reverse,这个很简单,就是指出是否进行倒序排序:一般情况下,1排在2的前面,而倒序则相反。

key参数:一般它是一个函数,它接受列表中每一个元素,返回一个可用用于比较的值。

s=[1,2,3,4,5]

s.sort(key=lambda _: _**2%7)

print(s)

输出的是:[1, 3, 4, 2, 5]

如果看不懂lambda表达式,可以看这一段等价的写法:

def myfn(x):

....return (x * x) % 7

s=[1,2,3,4,5]

s.sort(key=myfn)

print(s)

输出的结果是一样的。

key使用的函数可以是自定义函数也可以pytho内置的函数,或者是某个类或者实例的方法,只要它能接受一个参数,返回一个可比较的值即可。比如这样:

s=[[1,2,4],[3,3,5],[1,1,1],[5,7,9]]

s.sort(key=max)  # 直接使用max函数作为排序依据

print(s)

[[1, 1, 1], [1, 2, 4], [3, 3, 5], [5, 7, 9]]


本文名称:python多列排序函数 python多个列表排序
URL地址:http://ybzwz.com/article/hhehoo.html