Python 小技巧-利用 itemgetter 提升排序速Python 小技巧-利用 itemgetter 提升排序速度

排序是编程是最常遇到的场景了,今天分享一个小技巧,可以让 Python 排序的速度有所提升。你看完可以收藏备用。

通常,我们要排序的数据并不是纯数字或纯字母,而是各种数据类型的混合,比如要排序的数据可能是这个样子:

data = [('c',3),('b',1),('a',2)]

默认情况下,排序按照列表元素的第一个值进行的排序:

In [6]: data = [('c',3),('b',1),('a',2)]

In [7]: sorted(data)
Out[7]: [('a'2), ('b'1), ('c'3)]

In [8]:

如果要按照第二个值进行排序,则需要传入一个 lambda 函数,来指定要排序的 key:

In [8]: data = [('c',3),('b',1),('a',2)]

In [9]: sorted(data,key = lambda x:x[1])
Out[9]: [('b'1), ('a'2), ('c'3)]

In [10]:

现在,你可以不用 lambda 函数,而是使用 itemgetter 函数,而且速度更快

itemgetter 函数可以生成高效的 getter 函数版本,可以与 sorted() 函数结合使用以提高排序操作的性能。

上面的代码就可以写成这样:

In [11]: from operator import itemgetter

In [12]: data = [('c',3),('b',1),('a',2)]

In [13]: sorted(data,key = itemgetter(1))
Out[13]: [('b'1), ('a'2), ('c'3)]

你可能好奇,itemgetter 是如何工作的?那么请看下面的代码:

In [14]: item = ('c',3)

In [15]: getter = itemgetter(1)

In [16]: getter(item)
Out[16]: 3

In [17]: getter = itemgetter(0)

In [18]: getter(item)
Out[18]: 'c'

In [19]: item = {'c':3}

In [22]: getter = itemgetter('c')

In [23]: getter(item)
Out[23]: 3

itemgetter() 是 Python 标准库的一部分,向 itemgetter() 传递一个参数,这个参数或者是索引位置,或者是字典的键,然后 itemgetter() 函数将返回一个可以调用的 getter 对象。

现在让我们来测试一下 lambda 和 itemgetter 在排序时,到底哪个更高效?

Python 小技巧-利用 itemgetter 提升排序速Python 小技巧-利用 itemgetter 提升排序速度

从上面的结果可以看出,使用 itemgetter() 更高效。

最后的话

如果要排序的数据比较大,那就用 itemgetter 吧,丢弃 key = lambda… 。如果有收获,还请点赞、关注、转发。


原文始发于微信公众号(Python七号):Python 小技巧-利用 itemgetter 提升排序速Python 小技巧-利用 itemgetter 提升排序速度

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/39651.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!