Python中的sort函数,sort和sorted函数python

  Python中的sort函数,sort和sorted函数python

  在学习python的过程中,感觉python中的排序阶段类似于C中的泛型算法,但比C中的更简单易用。

  python中list的内置函数sort()可以对list中的元素进行排序,而全局sorted()函数适用于所有迭代序列;而且sort()函数是内置函数,会改变当前对象,而sorted()函数只会返回当前对象的一个排序后的副本,而不会改变当前对象。

  1.内置函数sort()

  原型:排序(有趣,关键,反向=假)

  参数fun表示这个排序函数基于哪种算法。一般情况下,python默认使用归并排序,一般情况下,我们不会重写这个参数,所以基本可以忽略;

  key参数用于指定一个函数,每次比较元素时都会调用该函数。这个函数代表排序规则,也就是你根据什么规则对你的序列进行排序;

  参数reverse用于表示是否处于相反的顺序。默认情况下,它按升序排序。当reverse=True时,将按降序排序。

  下面是一个简单的例子:

  (由于个人喜好,我的编译器是pycharm,所以下面的例子都可以在pycharm中运行。)

  #编码:utf-8

  从运算符导入attrgetter,itemgetter

  list1=[(2,《桓》,23),(12,《经》,14),(23,《刘》,90)]

  #按默认参数排序,即按元组中的第一个元素排序

  list1.sort()

  打印列表1

  #输出结果为[(2,桓,23),(12,本,14),(23,刘,90)]

  #用匿名表达式重写key表示的函数,按tuple的第二个元素排序。

  list1.sort(key=lambda x:(x[1]))

  打印列表1

  #[(2,桓,23),(23,刘,90),(12,本,14)]

  #用匿名表达式重写key表示的函数,按照元组的第三个元素排序。

  list1.sort(key=lambda x:(x[2]))

  打印列表1

  #[(12,著,14),(2,桓,23),(23,刘,90)]

  #用匿名函数重写key表示的函数,先按照元组中下标2排序,

  #如果下标2处的元素相同,则按下标0处的元素排序。

  list1.sort(key=lambda x:(x[2],x[0]))

  打印列表1

  #[(12,著,14),(2,桓,23),(23,刘,90)]

  #使用运算符模块中的itemgetter函数重写key表示的函数,按照下标为1的元素排序。

  list1.sort(key=itemgetter(1))

  打印列表1

  #[(2,桓,23),(23,刘,90),(12,本,14)]

  #使用运算符模块中的itemgetter函数重写key表示的函数,按照下标为2的元素排序。

  list1.sort(key=itemgetter(2))

  打印列表1

  # [(12,著,14),(2,桓,23),(23,刘,90)]

  # lambda中的排序方法在这里可以类比,不再赘述。

  list1.sort(key=itemgetter(2,0))

  打印列表1

  #[(12,著,14),(2,桓,23),(23,刘,90)]

  如果你不知道上面的匿名功能,可以自己去了解一下,这里就不展开了。

  这里我想解释一下算子模块中的两个函数:

  (1)itemgetter

  operator . item getter(item)operator . item getter(* items)这个函数会调用传入操作数的__getitem__()方法返回一个带有item的可调用对象,如果传入的参数是多个,则返回一个tuple类型的可调用对象。比如:f=itemgetter(2),调用f(r)后会返回r[2]g=itemgetter(2,5,3),调用g(r)后会返回tuple (r[2),

  R [5],R [3])。(2) Attrgetteroperator。Attrgetter (attr)运算符。Attrgetter (* attrs)该函数返回一个操作数中带有attr属性的可调用对象。如果传入了多个属性,则返回包含这些属性的元组。这些属性的名称可以包含多个子名称,例如:f=

  Attrgetter(name ),调用f(b)将返回b.name.f=

  Attrgetter(name , date ),调用f(b)将返回(b.name,

  b .日期)。f=

  Attrgetter (name.first , name.last ),调用f(b)将返回(b.name.first,

  b.name.last)。

  2.全局函数排序()

  sorted()函数中键的重写和sort()函数中的重写是一样的,所以刚才在sort()中解释的方法都适用于sorted()函数,下面的解释我就不一一列举了,而下面要解释的键的重写也适用于sort()函数,那么为什么不在sort()函数中再列举一遍呢,为了不

  这里还有一个例子:

  从操作员导入attrgetter

  类别数据:

  article_name=str()

  读者=0

  def __init__(self,tpl):

  self.article_name=tpl[0]

  self.readers=tpl[1]

  def getKey(self):

  回归自我.读者

  def __str__(self):

  return str(str(self . article _ name)str(:)str(self . readers))

  list 1=[数据(( java ,100)),数据(( c ,100),数据(( python ,89),数据(( c ,90))]

  #在这里调用attrgetter函数按读者排序。

  list2=已排序(list1,key=attrgetter(readers ))

  “”的结果是

  python:89

  丙:90

  java:100

  列车员:100元

  #这里list1先按article_name排序,同名的按读者排序。

  list3=sorted(list1,key=attrgetter(article_name , readers ))

  结果是:

  丙:90

  列车员:100元

  java:100

  python:89

  #使用类中的自定义函数也可以操作。

  list4=已排序(list1,key=Data.getKey)

  结果是:

  python:89

  丙:90

  java:100

  列车员:100元

  上面例子的结果都打印出来了。

  对于sorted()函数,还可以使用sort()函数中引入的方法。你可以自己试试。

  最后,当然,在上面所有的例子中,我都没有使用reverse参数。对于此参数,它用于控制排序的方向。可以自己试试,这里就不介绍了。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: