python 的sort()函数详解

Posted qq_20831401

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 的sort()函数详解相关的知识,希望对你有一定的参考价值。

1.函数sort()是对列表就地排序

>>> x=[8,9,0,7,4,5,1,2,3,6]
>>> x.sort()
>>> print(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 

2.函数sort()修改序列,不返回任何值

>>> x=[8,9,0,7,4,5,1,2,3,6]
>>> y=x.sort()
>>> print(y)
None
>>> print(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 

3.sorted()函数会返回一个排序列表,不改变原有序列

>>> x=[8,9,0,7,4,5,1,2,3,6]
>>> y=sorted(x)
>>> print(y)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(x)
[8, 9, 0, 7, 4, 5, 1, 2, 3, 6]

4.函数sort()是升序排序,如何降序排序,需要用到函数reverse()

>>> x=[8,9,0,7,4,5,1,2,3,6]
>>> x.sort()
>>> x.reverse()
>>> print(x)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
 

5.函数sort()排序的高级用法

方法sort()可以接受两个参数sort(key,reverse)

(1) key参数
key接受的是一个只有一个形参的函数

key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序

>>> x=[8,9,0,7,4,5,1,2,3,6]
>>> def size(a):
>>>     x=10-int(a)
>>>     return x
>>> x.sort(key=size)
>>> print(x)

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

(2) reverse参数
reverse接受的是一个bool类型的值 (Ture or False),表示是否颠倒排列顺序,一般默认的是False,注意第一个字母是大写的

>>> x=[8,9,0,7,4,5,1,2,3,6]
>>> x.sort(reverse=True)
>>> print(x)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> x.sort(reverse=False)
>>> print(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 

sort()函数使用详解

使用时需要导入头文件<algorithm>

#include<algorithm>

语法描述:sort(begin,end,cmp),cmp参数可以没有,如果没有默认非降序排序。

一.以int为例的基本数据类型的sort使用

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()

    int a[5]=1,3,4,2,5;
    sort(a,a+5);
    for(int i=0;i<5;i++)
            cout<<a[i]<< ;
    return 0;
 

因为没有cmp参数,默认为非降序排序,结果为:

1 2 3 4 5

若设计为非升序排序,则cmp函数的编写:

bool cmp(int a,int b)

  return a>b;

其实对于这么简单的任务(类型支持“<”、“>”等比较运算符),完全没必要自己写一个类出来。标准库里已经有现成的了,就在functional里,include进来就行了。functional提供了一堆基于模板的比较函数对象。它们是(看名字就知道意思了):equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>。对于这个问题来说,greater和less就足够了,直接拿过来用:

升序:sort(begin,end,less<data-type>());

降序:sort(begin,end,greater<data-type>()).

int  main ( )

      int a[20]=2,4,1,23,5,76,0,43,24,65,i;
      for(i=0;i<20;i++)
          cout<<a[i]<<endl;
      sort(a,a+20,greater<int>());
      for(i=0;i<20;i++)
          cout<<a[i]<<endl;
      return 0;

二.引用数据类型string的使用

一个字符串间的个字符排序:

使用迭代器可以完成顺序排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()

    string str("hello world");
    sort(str.begin(),str.end());
    cout<<str;
    return 0;
 
结果:空格dehllloorw

使用反向迭代器可以完成逆序排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()

    string str("hello world");
    sort(str.rbegin(),str.rend());
    cout<<str;
    return 0;
 
结果:wroolllhde空格

字符串间的比较排序

#include<iostream>
#include<cstring >
#include<algorithm>
using namespace std;
int main()

    string a[4];
    for(int i=0;i<4;i++)
        getline(cin,a[i]);
    sort(a,a+4);
    for(int i=0;i<4;i++)
        cout<<a[i]<<endl;
    return 0;

三.以结构体为例的二级排序

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct link

    int a,b;
;
bool cmp(link x,link y)

    if(x.a==y.a)
        return x.b>y.b;
    return x.a>y.a;

int main()

    link x[4];
    for(int i=0;i<4;i++)
        cin>>x[i].a>>x[i].b;
    sort(x,x+4,cmp);
    for(int i=0;i<4;i++)
        cout<<x[i].a<< <<x[i].b<<endl;
    return 0;
 

 

以上是关于python 的sort()函数详解的主要内容,如果未能解决你的问题,请参考以下文章

sorted() 详解

Python3内置函数详解

sorted() 和 lambda --> 应用:字典排序

python详解pandas库的pd.merge函数

python中列表的sort方法使用详解

每日一模块-Python字典按keyvalue排序问题详解