- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章深入理解python中sort()与sorted()的区别由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列 。
一,最简单的排序 。
1.使用sort排序 。
1
2
3
4
|
my_list
=
[
3
,
5
,
1
,
4
,
2
]
my_list.sort()
print
(my_list)
#输出: [1, 2, 3, 4, 5]
|
使用sort()方法对list排序会修改list本身,不会返回新list. 。
sort()不能对dict字典进行排序 。
2.使用sorted()排序 。
1
2
3
4
5
6
7
8
9
|
my_list
=
[
3
,
5
,
1
,
4
,
2
]
result
=
sorted
(my_list)
print
(result)
#输出: [1, 2, 3, 4, 5]
my_dict
=
{
"a"
:
"1"
,
"c"
:
"3"
,
"b"
:
"2"
}
result
=
sorted
(my_dict)
print
(result)
#输出: ['a', 'b', 'c']
|
sorted()会生成一个新的列表或字典对象,对dict排序默认会按照dict的key值进行排序,最后返回的结果是一个对key值排序好的list 。
二,key参数 。
从python2.4开始,list.sort()和sorted()函数增加了key参数来指定一个函数,此函数将在每个元素比较前被调用 。
key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较。这个技术是快速的因为key指定的函数将准确地对每个元素调用.
1.对复杂的元组排序 。
1
2
3
4
5
6
7
8
|
student_tuples
=
[
(
'john'
,
'A'
,
15
),
(
'jane'
,
'B'
,
12
),
(
'dave'
,
'B'
,
10
),
]
result
=
sorted
(student_tuples, key
=
lambda
student: student[
2
])
print
(result)
#输出 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
|
以上可以看出排序是按照10, 12, 15值进行排序的,因为函数lambda student:student[2]返回的值分别是10, 12, 15.
所以就用函数返回的值进行比较;key=15 ,key=12,key=10根据这些返回值进行比较; 。
1
2
3
|
lambda
student:student[
2
] 等价于
def
f(student):
return
student[
2
]
|
2.根据字典的value排序 。
默认sorted是对dict的key排序的,如果要根据dict的value排序就需要指定key参数了 。
1
2
3
4
5
6
7
8
9
|
my_dict
=
{
"a"
:
"2"
,
"c"
:
"5"
,
"b"
:
"1"
}
result
=
sorted
(my_dict)
print
(result)
#默认对dict排序,不指定key参数,会默认对dict的key值进行比较排序
#result输出: ['a', 'b', 'c']
result2
=
sorted
(my_dict, key
=
lambda
x:my_dict[x])
print
(result2)
#指定key参数,根据dict的value排序
#result2输出:['b', 'a', 'c']
|
扩展用法:
1.Key Function:
从Python2.4开始,list.sort() 和 sorted() 都增加了一个 ‘key' 参数用来在进行比较之前指定每个列表元素上要调用的函数.
例如:
区分大小写的字符串比较排序:
1
2
|
>>>
sorted
(
"This is a test string from Andrew"
.split(), key
=
str
.lower)
[
'a'
,
'Andrew'
,
'from'
,
'is'
,
'string'
,
'test'
,
'This'
]
|
key应该是一个函数,其接收一个参数,并且返回一个用于排序依据的key。其执行效率很高,因为对于输入记录key function能够准确的被调用.
对于复杂的对象,使用对象的下标作为key.
例如:
1
2
3
4
5
6
7
|
>>> student_tuples
=
[
... (
'john'
,
'A'
,
15
),
... (
'jane'
,
'B'
,
12
),
... (
'dave'
,
'B'
,
10
),
... ]
>>>
sorted
(student_tuples, key
=
lambda
student: student[
2
])
# sort by age
[(
'dave'
,
'B'
,
10
), (
'jane'
,
'B'
,
12
), (
'john'
,
'A'
,
15
)]
|
使用对象的属性进行操作:
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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))
>>>
>>> student_objects
=
[
... Student(
'john'
,
'A'
,
15
),
... Student(
'jane'
,
'B'
,
12
),
... Student(
'dave'
,
'B'
,
10
),
... ]
>>>
sorted
(student_objects, key
=
lambda
student: student.age)
# sort by age
[(
'dave'
,
'B'
,
10
), (
'jane'
,
'B'
,
12
), (
'john'
,
'A'
,
15
)]
|
总结 。
以上所述是小编给大家介绍的python中sort()与sorted()的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:https://www.cnblogs.com/skaarl/p/9497130.html 。
最后此篇关于深入理解python中sort()与sorted()的区别的文章就讲到这里了,如果你想了解更多关于深入理解python中sort()与sorted()的区别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
平时很少在jquery中用到this。查看代码时发现用到了,就调试出this的值,心想原来如此。还是挺有用的。这里总结一下this与$(this)的区别和使用。 $(this)生成的是什么?
使用单例类和应用程序范围的托管 bean 来保存应用程序数据有区别吗? 我需要查找某些 JNDI 资源,例如远程 bean 接口(interface),因此我为自己编写了一个单例来缓存我的引用并且只允
如果您仔细查看包含的图片,您会注意到您可以使用 Eclipse IDE 重构 Groovy 代码并将方法转换为闭包,反之亦然。那么,闭包到底是什么,它与方法有什么不同呢?有人可以举一个使用闭包的好例子
vagrant box repackage有什么区别( docs ) 和 vagrant package ( docs )? 我意识到 vagrant package仅适用于 VirtualBox 提
我想看看是否有人可以解释为什么以下代码适用于 valueOf 但不适用于其他代码。 import java.math.BigDecimal; public class Change { publ
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: What is Closures/Lambda in PHP or Javascript in layman te
This question already has answers here: Vagrant, Docker, Puppet, Chef (3个答案) 2年前关闭。 docker和chef有什么共同
以下代码在95%的机器上产生相同的输出,但是在几台机器上却有所不同。在 Debug模式下,输出: Changing from New to Fin OK 但在 Release模式下: Changing
////Creating Object var Obj; // init Object Obj= {}; 它们之间有什么区别两个? 有没有可能把它变成一个单行? 这样使用有什么好处吗?
我想找出定时器服务之间的区别。我应该使用哪个以及何时使用。我正在使用 Jboss 应用服务器。 1) java.ejb.Schedule。 @Schedule注解或配置自xml。 2) javax.e
我发现在 C++ 中可以通过三种不同的方式将对象传递给函数。假设我的类(class)是这样的: class Test { int i; public: Test(int x);
有什么区别。 public class Test { public static void main(String args[]) { String toBeCast = "c
如果我有一列,设置为主索引,设置为INT。 如果我不将其设置为自动递增,而只是将唯一的随机整数插入其中,与自动递增相比,这是否会减慢 future 的查询速度? 如果我在主索引和唯一索引为 INT 的
这两种日期格式有什么区别。第一个给出实际时间,第二个给出时间购买添加时区偏移值。 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]
如果有一个函数,请说foo: function foo() { console.log('bar'); } 那么在 JavaScript 中,从另一个函数调用一个函数有什么区别,如下所示: f
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
代码是什么: class Time { private: int hours; int minutes; int seconds; pu
我知道这是非常基本的,但有人介意解释一下这两个数组声明之间的区别吗: #include array myints; ...和: int myints[5]; ...以及为什么 myints.size
我学会了如何根据 http://reference.sitepoint.com/css/specificity 计算 css 特异性但是,基于this reference,我不明白伪类(来自c)和伪元
为什么在运行 2) 时会出现额外的空行?对我来说 1 就像 2。那么为什么 2) 中的额外行? 1) export p1=$(cd $(dirname $0) && pwd) #
我是一名优秀的程序员,十分优秀!