sort函数

上一篇 / 下一篇  2017-08-18 22:05:06 / 个人分类:python

Sort函数

sort函数的使用方法定义:
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
作用:对原序列进行排序,也就是直接在原序列上操作,没有返回值
cmp:为一个定制的比较函数,接受两个参数,并且如果第一个参数小于第二个
参数,则返回一个负数,大于则返回一个整数,等则返回0。默认值为None
key:也是一个函数,这个函数会从每个元素中提取一个用于比较的关键字。默认值为None
reverse接受False或者True,表示是否逆序。如设置为True,表示颠倒表示是否颠倒排列顺序
代码示例:

1按照序列的长度倒序排序 

#encoding=utf-8

list1 = [(1,5,3),(1,3,6,3),(1,1,2,4,5,6),(1,9)]

def L(tup) :  

    Print tup

    return len(tup) #元素的长度就是list1中元素的权值,sort根据这个权值进行排序

list1.sort(key = L,reverse = True)

‘’’

# L相当于传递了函数对象,这句话相当于把list1遍历,把每个元素去调用L函数,每次返回的值组成列表,然后就按照这个列表的元素的大小进行排序

>>> a=[]

>>> for i in list1:

...     a.append(len(i))

...

 

‘’’

print list1

---------------------------

(1, 5, 3)

(1, 3, 6, 3)

(1, 1, 2, 4, 5, 6)

(1, 9)

[(1, 1, 2, 4, 5, 6), (1, 3, 6, 3), (1, 5, 3), (1, 9)]

'''

2、按照元组中的最后一个元素的大小来进行排序

'''

print "--"*10

def zh(tup):

    print tup[-1]

    return tup[-1]

'''

    a=[]

    for i in tup:

        a.append(i[-1])

    return a

'''

 

list1.sort(key = zh,reverse = True)  #reverse=True代表逆序排列

print list1

--------------------

6

3

3

9

[(1, 9), (1, 1, 2, 4, 5, 6), (1, 3, 6, 3), (1, 5, 3)]

 

'''

3、按照元组中的所有元素的平方之和来进行排序

'''

print "--"*10

def zh(tup):

    sum=0

    print tup

    for i in tup:

        print i

        sum+=i**2

    return sum

list1.sort(key = zh,reverse = True)

print list1

---------------------------------------------

(1, 9)

1

9

(1, 1, 2, 4, 5, 6)

1

1

2

4

5

6

(1, 3, 6, 3)

1

3

6

3

(1, 5, 3)

1

5

3

[(1, 1, 2, 4, 5, 6), (1, 9), (1, 3, 6, 3), (1, 5, 3)]

4按照元组中的绝对值来进行排序

1)cmpkey都有

print "按照元组中的绝对值来进行排序"

print "--"*10

def compare(a,b):

   #升序排

    if abs(a)>abs(b):

        return 1

    elif abs(a)==abs(b):

        return 0

    else:

        return -1

def L(tup) :

    return tup[0]

list1 = [(-1,5,3),(-5,3,6,3),(1,1,2,4,5,6),(2,9),(-2,10)]

list1.sort(cmp=compare,key = L,reverse = False)  #升序   不颠倒

print list1

按照元组中的绝对值来进行排序

--------------------

[(-1, 5, 3), (1, 1, 2, 4, 5, 6), (2, 9), (-2, 10), (-5, 3, 6, 3)]  升序排

'''

list1.sort(cmp=compare,key = L,reverse = True)  #升序,颠倒

print list1

[(-5, 3, 6, 3), (2, 9), (-2, 10), (-1, 5, 3), (1, 1, 2, 4, 5, 6)]  降序排

2)只用key

>>> def L(tup):

...     return abs(tup[0])

...

>>> list1.sort(key=L,reverse=True)

>>> list1

[(-5, 3, 6, 3), (2, 9), (-2, 10), (-1, 5, 3), (1, 1, 2, 4, 5, 6)]

3)只用cmp

>>> def cm(a,b):

...     if abs(a[0])>abs(b[0]):

...         return 1

...     elif abs(a[0])<abs(b[0]):

...         return -1

...     else:

...         return 0

...

>>> list1

[(-5, 3, 6, 3), (2, 9), (-2, 10), (-1, 5, 3), (1, 1, 2, 4, 5, 6)]

>>> list1.sort(cmp=cm,reverse=False)

>>> list1

[(-1, 5, 3), (1, 1, 2, 4, 5, 6), (2, 9), (-2, 10), (-5, 3, 6, 3)]

>>>

 

5、一个包含多个单词的list,自定义比较函数,函数需要基于字符串的长度做比较,越长的越大。

'''

list1 = ["i","am","a","girl","i","like","listen","music"]

def compare(a,b):

    if abs(a)>abs(b):

        return 1

    elif abs(a)==abs(b):

        return 0

    else:

        return -1

def L(tup) :

    return len(tup)

list1.sort(cmp=compare,key = L,reverse = False)

print list1

-------------------------------

['i', 'a', 'i', 'am', 'girl', 'like', 'music', 'listen']

自定义比较函数,升序排

def compare(a,b):

    if len(a)>len(b):

        return 1

    elif len(a)==len(b):

        return 0

    else:

        return -1

list2=["3e","zhang","is"]

list2.sort(cmp=compare,reverse = False)  #升序,不颠倒

print list2

-------------------------

zhang 3e

is zhang

is zhang

is 3e

['3e', 'is', 'zhang']

 

自定义比较函数,降序排

def compare(a,b):

    print a,b

    if len(a)<len(b):

        return 1

    elif len(a)==len(b):

        return 0

    else:

        return -1

list2=["3e","zhang","is"]

list2.sort(cmp=compare,reverse = False)  #降序,不颠倒

print list2

-----------------------

zhang 3e

is zhang

is 3e

['zhang', '3e', 'is'] #降序

 

list2.sort(cmp=compare)  #降序

print list2

-----------------------

zhang 3e

is zhang

is 3e

['zhang', '3e', 'is']

 

list2.sort(cmp=compare,reverse = True)  #降序,颠倒

print list2

zhang is

3e zhang

3e is

['3e', 'is', 'zhang']  #升序


TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-01  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 14756
  • 日志数: 20
  • 建立时间: 2016-10-19
  • 更新时间: 2018-01-27

RSS订阅

Open Toolbar