Python | 排序

喜欢就点击上面↑蓝色字体关注我们!

1、sorted()函数

该函数不修改原序列,结果返回一个新列表。

sorted(seq, key=None, reverse=False)

seq:要排序的序列,如列表、元组、一维数组、字符串等;

key:设置权重值,并按该权重进行排序,一般通过一个函数设置权重;

reverse:是否倒序排列,默认False;

  • 按大小排序
lst1 = [4, 5, 2, 1, 9]
lst1_1 = sorted(lst1)
lst1_2 = sorted(lst1, reverse=True)
  • 按长度排序
lst2 = ['acd', 'a', 'asder', 'abjiye', 'as']
lst2_1 = sorted(lst2, key=lambda x: len(x))
lst2_2 = sorted(lst2, key=lambda x: len(x), reverse=True)
  • 按绝对值大小排序
lst3 = [-11, 8, 2, 1, -7]
lst3_1 = sorted(lst3, key=lambda x: abs(x))
lst3_2 = sorted(lst3, key=lambda x: abs(x), reverse=True)
  • 通过设置参数key可以实现比较复杂的排序,比如对一个序列按以下规则进行排序:1.正数在前负数在后;2.偶数在前奇数在后;3.最后按大小排序。下面的例子中,参数key中的函数返回3个结果,并按照函数返回结果的顺序进行排序。
lst4 = [11, -3, -6, 8, -4, -7, 2, 4, 1, -5, 10, -2, 3]
sorted(lst4, key=lambda x:(x<0, int(x) % 2 != 0, x))
Out[1]: [2, 4, 8, 10, 1, 3, 11, -6, -4, -2, -7, -5, -3]

2、list.sort()列表方法

原列表list上进行排序,没有返回值。参数key和reverse和sorted()函数中的参数用法一样。

list.sort(key=None, reverse=False)
  • 用该方法对列表lst4实现上述的排序
lst4 = [11, -3, -6, 8, -4, -7, 2, 4, 1, -5, 10, -2, 3]
lst4.sort(key=lambda x:(x<0, int(x) % 2 != 0, x))
print(lst4)
# [2, 4, 8, 10, 1, 3, 11, -6, -4, -2, -7, -5, -3]

3、reversed()函数

返回一个反转的迭代器。

reversed(seq)

seq:列表、元组、一维数组、字符串等序列;

# 字符串
seqString = 'Victory'
list(reversed(seqString))
# 列表
seqList = [1, 2, 4, 3, 5]
list(reversed(seqList))
# 元组
seqTuple = ('V', 'i', 'c', 't', 'o', 'r', 'y')
list(reversed(seqTuple))
# 数组
seqArray = np.array([1, 2, 4, 3, 5])
list(reversed(seqArray))
# range
seqRange = range(3, 8)
list(reversed(seqRange))

4、list.reverse()列表方法

对原列表进行反转,无返回值。

lst5 = [1, 2, 4, 3, 5]
lst5.reverse()
print(lst5)
# [5, 3, 4, 2, 1]

5、Series.sort_values()

对Series按值的大小排序。

Series.sort_values(ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False)

ascending:是否升序,默认True;

inplace:是否在原数据上排序,默认False,返回新的数据;若inplace=True,无返回值;

kind:排序算法:'quicksort', 'mergesort' , 'heapsort';

na_position:缺失值在排序时放在最前还是最后,默认'last';

ignore_index:是否忽略原数据的索引,默认False,若ignore_index=True,则对排序后的数据重建索引0,1,2,...;

s = Series([7, np.nan, 1, 4, 11, 6])
s.sort_values()
s.sort_values(ascending=False)
s.sort_values(na_position='first')

6、Series.sort_index()

对Series按索引的大小排序。

Series.sort_index(level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False)

level:指定排序的索引水平;

sort_remaining:其余索引水平在level指定的索引排序后是否再作为排序索引,默认True;

arrays = [np.array(['q1', 'q1', 'f1', 'f1', 'b2', 'b2', 'b1', 'b1']),
          np.array([2, 1, 2, 1, 2, 1, 2, 1])]
s = Series([10, 20, 30, 40, 50, 60, 70, 80], index=arrays)
s.sort_index(level=1)
s.sort_index(level=1, sort_remaining=False)

7、DataFrame.sort_values()

对DataFrame按行/列的值排序。

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False)

axis:排序的轴,取0或1,默认为0;

by:若axis=0,则by包含列索引名称;若axis=1,则by包含行索引名称;

df = DataFrame({'c1': [2, 3, 2, np.nan, 4, 3],
                'c3': [1, 4, 9, 8, 7, 4],
                'c2': [7, 1, 9, 4, 2, 3],
                'c4': [7, 2, 1, 5, 7, 3]},
                index=[0, 3, 1, 5, 2, 4])
# 按列排序
df.sort_values(by=['c1', 'c2'], ascending=False)
df.sort_values(by=['c1', 'c2'], ascending=[False, True])
# 按行排序
df.sort_values(by=[0, 1], axis=1, ascending=False)

8、DataFrame.sort_index()

对DataFrame按索引的大小排序。

DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False)

参数同上;

df = DataFrame({'c1': [2, 3, 2, np.nan, 4, 3],
                'c3': [1, 4, 9, 8, 7, 4],
                'c2': [7, 1, 9, 4, 2, 3],
                'c4': [7, 2, 1, 5, 7, 3]},
                index=[0, 3, 1, 5, 2, 4])
# 按行索引排序
df.sort_index()
df.sort_index(ascending=False)
# 按列索引排序
df.sort_index(axis=1)

本文分享自微信公众号 - 大数据建模的一点一滴(bigdatamodeling),作者:小石头

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 决策树可视化-python

    决策树相较于其他机器学习模型具有较好的解释性,也容易将其结果进行可视化展示,python中sklearn.tree的export_graphviz函数可以将决策...

    小石头
  • 模型评估指标

    本文主要介绍python已有模块中模型评估指标的使用,主要有sklearn.metrics、scikitplot.skplt等方法,并且重点展示分类模型的常用的...

    小石头
  • 算法 | 决策树

    决策树是一种基本学习方法,可用于回归和分类。回归树的分割准则一般是平均误差,而分类树的分割准则有信息增益、信息增益率、基尼指数等,下面简单梳理决策...

    小石头
  • javascript设置百分比保留两位小数。

    参考:https://www.cnblogs.com/Marydon20170307/p/7417374.html

    别先生
  • 第三十七章:基于SpringBoot架构以及参数装载完成接口安全认证

    恒宇少年
  • 剑指OFFER之第一个只出现一次的字符(九度OJ1283)

    题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。 输入: 输入有多组数据 每一组输入一个字符串。 输...

    用户1154259
  • 腾讯刘炽平:海外用户破7000万 微信带开发者“出海”

        腾讯合作伙伴大会今日在北京国家会议中心召开。本次大会以“开放·变革”为主题。腾讯公司总裁刘炽平在现场宣布,持续增加腾讯整个开放平台的规模是坚定不移...

    腾讯研究院
  • Shiro rememberME 自定义rememberMeManager 不能使用

    #cookie rememberMeCookie = org.apache.shiro.web.servlet.SimpleCookie  rememberMe...

    冷冷
  • APScheduler的简单记录

    此工具作为 定时任务调度 系统,在日常业务中经常使用,如定时获取第三方数据,定时清理数据 等等;

    用户1558882
  • Redis 与 Lua 使用中的小问题

    在 Redis 里执行 get 或 hget 不存在的 key 或 field 时返回值在终端显式的是 (nil),类似于下面这样

    haifeiWu

扫码关注云+社区

领取腾讯云代金券