python列表sort
Ⅰ python sort()用法
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明:
一、基本形式
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。
x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]
如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢
x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
另一种获取已排序的列表副本的方法是使用sorted函数:
x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
sorted返回一个有序的副本,并且类型总是列表,如下:
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
二、自定义比较函数
可以定义自己的比较函数,然后通过参数传递给sort方法:
def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 调用内建函数cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]
三、可选参数
sort方法还有两个可选参数:key和reverse
1、key在使用时必须提供一个排序过程总调用的函数:
x = ['mmm', 'mm', 'mm', 'm' ]
x.sort(key = len)
print x # ['m', 'mm', 'mm', 'mmm']
2、reverse实现降序排序,需要提供一个布尔值:
y = [3, 2, 8 ,0 , 1]
y.sort(reverse = True)
print y #[8, 3, 2, 1, 0]
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索python , 方法 sort python sort方法、python魔术方法详解、python实例方法详解、list.sort 使用方法、c list.sort 使用方法,以便于您获取更多的相关知识。
Ⅱ python怎么使用sort
一、基本形式
sorted(iterable[, cmp[, key[, reverse]]])
iterable.sort(cmp[, key[, reverse]])
参数解释:
(1)iterable指定要排序的list或者iterable,不用多说;
(2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如:
students为类对象的list,没个成员有三个域,用sorted进行比较时可以自己定cmp函数,例如这里要通过比较第三个数据成员来排序,代码可以这样写:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])
(3)key为函数,指定取待排序元素的哪一项进行排序,函数用上面的例子来说明,代码如下:
sorted(students, key=lambda student : student[2])
key指定的lambda函数功能是去元素student的第三个域(即:student[2]),因此sorted排序时,会以students所有元素的第三个域来进行排序。
二、普通用法:
1.原址排序
1)列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。
x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]
2.副本排序
1)[:]分片方法
x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
2)sorted方法
sorted返回一个有序的副本,并且类型总是列表,如下:
x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
三、高级用法
1.自定义cmp比较函数
def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 调用内建函数cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]
2.自定义key和reverse
1.reverse实现降序排序,需要提供一个布尔值,默认为False(升序排列)。
2.key在使用时必须提供一个排序过程总调用的函数:
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False)
-------------------------------------------------------------------------------------------
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]
四、operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。
a = [1,2,3]
>>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
itemgetter在sort中的用法:
from operator import itemgetter
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print sorted(alist, cmp = None, key = itemgetter(2, 1), reverse = False)
print sorted(alist, cmp = None, key = lambda x:itemgetter(2, 1)(x), reverse = False)
print sorted(alist, cmp = None, key = lambda x:map(int, itemgetter(2, 1)(x)), reverse = False)
--------------------------------------------------------------------------------------------------
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]
Ⅲ python中,如图,排序sort为啥不用赋值给一个中间变量就能打出来下面语句为啥又不行
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值。
所以不需要创建变量接收。
你也可以理解为sort()改变的原来的列表,不会产生新的列表。
Ⅳ 如何对列表进行排序 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语句
Python中的sort()函数是序列的内部函数,函数原型:
L.sort(cmp=None,key=None,reverse=False)
函数作用:它是把L原地排序,也就是使用后并不是返回一个有序的序列副本,而是把当前序列变得有序。
Python中sort()参数说明:
(1) cmp参数
cmp接受一个函数,拿整形举例,形式为:
deff(a,b):
returna-b
如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了。
(2) key参数
key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下:
deff(a):
returnlen(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
(3) reverse参数
接受False 或者True 表示是否逆序
Python中sort()函数举例:
(1)按照元素长度排序
L=[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
deff(x):
returnlen(x)
sort(key=f)
printL
//输出:
//[{1:9},{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6}]
(2)按照每个字典元素里面key为1的元素的值排序
L=[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
deff2(a,b):
returna[1]-b[1]
L.sort(cmp=f2)
printL
//输出:
//[{1:1,2:4,5:6},{1:3,6:3},{1:5,3:4},{1:9}]
Ⅵ python 获取列表元素有几种方式,常见的是哪种
Python中列表常见的方法有哪些?
Python列表定义:按特定顺序排列的元素组成。在Python中,用方括号[]来表示列表,并用逗号来分隔其中的元素。Python列表是编程中很常见的数据类型 。
列表是一种可修改的集合类型,其元素可以是数字、string等基本类型,也可以是列表、元组、字典等集合对象,甚至可以是自定义的类型。其定义方式如下:>>> nums = [1,2,3,4]>>> type(nums)>>> print nums[1, 2, 3, 4]>>> strs = ["hello","world"]>>> print strs['hello', 'world']>>> lst = [1,"hello",False,nums,strs]>>> type(lst)>>> print lst[1, 'hello', False, [1, 2, 3, 4], ['hello', 'world']]
下面我们来看一下列表中有哪些常见的方法:count():统计某个元素在列表中出现的次数。index():从列表中找出某个值第一个匹配项的索引位置。append():在列表末尾添加新对象。extend():在列表末尾一次性追加另一个序列的多个值。insert():在列表的指定位置插入对象。pop():移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。remove():移除列表中某个值的第一个匹配项。reverse():将列表中的元素反向,不重新拷贝一个列表。reversed():将列表中的元素反向,重新拷贝一个列表。sort():将列表中的元素排序,不重新拷贝一个列表。sortd():将列表中的元素排序,重新拷贝一个列表。():浅拷贝,只是给原来的列表贴上了一个新标签,对于一个复杂对象的子对象并不会完全复制,如果有子列表,改变原来的值,新的拷贝对象也会改变。deep():深拷贝,将复杂对象的每一层复制一个单独的个体出来。就是完全拷贝。常见内置函数:max()、min()、sum()、len()、all()、any()、zip()、enumerate()由于文章篇幅有限,具体的代码,推荐大家看这篇文章:https://www.jianshu.com/p/da6e449f4c6a
Ⅶ Python中,如何给列表排序
Python中给列表排序的方式有很多,可以自己实现,也可以用Python提供的方法
使用Python提供的方法:
列表.sort()
列表.sort(reverse=True)
自己实现:
num_list = [64, 34, 25, 12, 22, 11, 90]
print(num_list)
n = len(num_list)
# 遍历所有数组元素
for i in range(n):
for j in range(0, n - i - 1):
if num_list[j] > num_list[j + 1]:
num_list[j], num_list[j + 1] = num_list[j + 1], num_list[j]
print(num_list)
代码发到这边格式有点乱,有需要的话可以去到黑马程序员社区。有很多计算机技术的基础入门和高级进阶的内容,源码什么的也都有。
Ⅷ (小白求教)python中怎么用sort对某个列表排序
是排了顺序的哟!
A和a是不同的,排序是按照ascii码排的,大写字母的ascii码在小写字母之前。比如A的ascii码为65,a的ascii码为97。所以在排序时,大写字母开头的单词会排在前面。
你要是想忽略大小写,同时保留原始的大小写的话,可以修改all_words.sort()为all_words.sort(key=lambda x: x.lower())
Ⅸ 为什么python内置的sort比自己写的快速排序快100倍
主要原因,内置函数用C写的。在Python语言内无论如何造不出内置函数的轮子。这也是通常C跟C++语言用户更喜欢造基础算法的轮了的原因。因为C/C++用户真有条件写出匹敌标准库的算法,但很多高级语言不行,不是程序员技术差,是客观条件就根本做不到。
你比如说Java语言没人造字符串的轮子,C++光一个字符串类就有无数多的实现。是因为C+用户更喜欢写字符串类吗?显然不是,一方面是因为Java语言内没法造出匹敌Java内置标准库算法的轮子,而C++真的可以,另外一个比较惨的原因是C++标准库的字符串功能太弱了,大多数高级语言的字符串类功能都比C+标准库字符串类功能更强。
Cpp内置的排序是快排和堆排的结合,最坏时间复杂度为nlogn,而快排最坏是n2。至于python内部的排序,我认为是一个道理,不会简简单单是一个快排,举个简单例子,当你数据已经是有序的时候,再传入快排肯定就不合适。那你设置排序函数的时候,是不是预先将他打乱,再进行快排会更好呢。当然具体不会这么简单,只是我认为官方给的接口都是很精妙的,很值得学习。
一方面Python中sort函数是用C语言写的,C++内部的sort是由快排,直接插入和堆排序混合的,当数据量比较大的时候先用的快排,当数据量小的时候用直接插入,因为当数据量变小时,快排中的每个部分基本有序,接近直接插入的最好情况的时间复杂度O(n),就比快排要好一点了。
另外一方面这个的底层实现就是归并排序。,只是使用了Python无法编写的底层实现,从而避免了Python本身附加的大量开销,速度比我们自己写的归并排序要快很多,所以说我们一般排序都尽量使用sorted和sort。
Ⅹ 关于Python中sort函数赋值的问题
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明:
一、基本形式
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。
123
x = [4, 6, 2, 1, 7, 9]x.sort()print x # [1, 2, 4, 6, 7, 9]
如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢
12345
x =[4, 6, 2, 1, 7, 9]y = x[ : ]y.sort()print y #[1, 2, 4, 6, 7, 9]print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
另一种获取已排序的列表副本的方法是使用sorted函数:
1234
x =[4, 6, 2, 1, 7, 9]y = sorted(x)print y #[1, 2, 4, 6, 7, 9]print x #[4, 6, 2, 1, 7, 9]
sorted返回一个有序的副本,并且类型总是列表,如下:
1
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
二、自定义比较函数
可以定义自己的比较函数,然后通过参数传递给sort方法:
12345678910111213
def comp(x, y):if x < y:return 1elif x > y:return -1else:return 0 nums = [3, 2, 8 ,0 , 1]nums.sort(comp)print nums # 降序排序[8, 3, 2, 1, 0]nums.sort(cmp) # 调用内建函数cmp ,升序排序print nums # 降序排序[0, 1, 2, 3, 8]
三、可选参数
sort方法还有两个可选参数:key和reverse
1、key在使用时必须提供一个排序过程总调用的函数:
123
x = ['mmm', 'mm', 'mm', 'm' ]x.sort(key = len)print x # ['m', 'mm', 'mm', 'mmm']
2、reverse实现降序排序,需要提供一个布尔值:
123
y = [3, 2, 8 ,0 , 1]y.sort(reverse = True)print y #[8, 3, 2, 1, 0]