Python中的sorted函数以及operator.itemgetter函数

来源:互联网 发布:utorrent端口映射 mac 编辑:程序博客网 时间:2024/05/15 03:18

Python中的sorted函数以及operator.itemgetter函数

operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。

a = [1,2,3] 
>>> b=operator.itemgetter(1)      //定义函数b,获取对象的第1个域的值
>>> b(a) 

>>> b=operator.itemgetter(1,0)  //定义函数b,获取对象的第1个域和第0个的值
>>> b(a) 
(2, 1)

要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。

sorted函数
Python内置的排序函数sorted可以对list或者iterator进行排序,官网文档见:http://docs.python.org/2/library/functions.html?highlight=sorted#sorted,该函数原型为:

sorted(iterable[, 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所有元素的第三个域来进行排序。

有了上面的operator.itemgetter函数,也可以用该函数来实现,例如要通过student的第三个域排序,可以这么写:
sorted(students, key=operator.itemgetter(2)) 
sorted函数也可以进行多级排序,例如要根据第二个域和第三个域进行排序,可以这么写:
sorted(students, key=operator.itemgetter(1,2))

即先跟句第二个域排序,再根据第三个域排序。
(4)reverse参数就不用多说了,是一个bool变量,表示升序还是降序排列,默认为false(升序排列),定义为True时将按降序排列。

Python教程:[67]itemgetter对列表排序

  • |
  • 浏览:39
  • |
  • 更新:2014-04-28 14:59

上一篇文章讲了如何对list进行排序【请看传送门http://jingyan.baidu.com/article/90808022a546b8fd90c80f48.html】,今天我们进一步加深学习,使用 itemgetter来加速排序,并且可以减少代码的写作难度,我们来看看具体的例子,如何使用itemgetter:

  1. 首先装载一下operator模块

  2. 创建一个列表,列表由元组构成

  3. 使用itemgetter来进行排序,使用元组的第二个元素进行排序

  4. 使用元组的第一个元素进行排序

  5. 甚至我们可以先对元组的第2个元素进行排序,然后对第一个元素进行排序,形成多级排序。

  6. 当然,我们还可以使用reverse来进行逆序排列


0 0