【干货】python sorted()函数详尽教程(附lambda函数教程)(上)

这篇教程详细介绍了Python内置函数sorted(),包括其作用、排序规则、参数详解,以及如何解决多排序规则问题。内容涵盖数字、字符串、布尔值的排序,以及使用key参数自定义排序规则。此外,教程还探讨了如何利用元组处理复杂排序场景,为后续的lambda函数教程铺垫。
摘要由CSDN通过智能技术生成

【干货】python sorted()函数超详尽教程(附lambda函数教程)(上)(下篇还在赶工)

作者: MELATONIN_T
转载之前请私信:CSDN平台的用户 MELATONIN_T

0. 前言

sorted()函数作为一个内置函数(built-in function),在python中的使用频率比较高。我相信,基本上所有的python程序员都懂得如何使用sorted()函数。但是,并不是所有python程序员都懂得如何把sorted()用得更pythonic,更优雅。

在本文中,我将带领大家从sorted()函数的基本开始,详细介绍sorted()函数的运用,包括如何使用lambda。

本教程将分上下两篇,上篇主要介绍sorted()函数的基本功能与如何解决多规则的排序问题。下篇则围绕着lambda函数展开。希望大家在看完本教程之后能有所收获。

在学习本教程之后,大家应该仅能利用一行代码解开以下问题:

# 排序问题 : 排序规则:奇数<偶数<小写字母<大写字母。奇偶数,大小写字母各自内部分别按照升序排列。
['A', 2, 3, 'g', 4, 1]

# 答案例:[1, 3, 2, 4, 'g', 'A']

那么,就让我们开始教程吧。


1. sorted()函数的介绍

1.1 sorted()函数的作用

1.1.0 概述

什么是sorted()函数? 它是用来干什么的?

用官方文档里的话来说:The sorted() function returns a sorted list from the items in an iterable. “sorted函数会返回一个排好顺序的可迭代对象的列表。”

用人话来说:我们给sorted一个可以排序(准确来说是迭代)的东西,sorted会把它排好序,变成列表还给你。

什么叫排好序? sorted中的排序规则有哪些呢?我们一起来看下一节。


1.1.1 sorted的排序规则

sorted()函数非常强大,可以给字符串,列表,元组,字典,集合等可迭代对象进行排序。

>>>sorted([2, 3, 1])
[1, 2, 3]

就像上面的例子一样,在默认的情况下,列表中的数字会按照从小到大的顺序被排序。这就是sorted的一种排序规则。

在这一节中,我将带着大家了解(基本)所有的python sorted()函数的排序规则。


- 数字

sorted()中数字的默认排序规则是升序排列

这里说的数字不仅是int整数型,也可以包含float。我们来看一个例子。

>>>nums = [2.6, 3, 1, 1/3, -1]
>>>sorted(nums)
[-1, 0.3333333333333333, 1, 2.6, 3]

可以看到,无论是整数,小数,负数,还是计算式, sorted函数都会默认地把他们(和计算式的结果)从小到大排序。


- 字符串

字符串也是可以被排序的,原因,一言以蔽之,因为它是可迭代对象,因为它可以被for…in…

就像这样:

s = "python"
for char in s:
    print(char)

# results
p
y
t
h
o
n

我们使用了for…in…打印了字符串中的每一个字母。
(为什么我会重点强调可迭代对象这个问题我会在 1.2 sorted()函数的参数 中讲解)

既然字符串可以被排序,那它一定有一个排序规则。没有规则,根本无法进行排序。比如"a"在"b"之前,"b"在"c"之前,就是一种排序规则。在sorted中,字符串是如何被排序的呢?

字符串的排序规则很直观,不是按照ascii码,sorted会按照英文的字母表和字母的大小写进行排序。例如:

a<b<c<d<…<z
A<a, B<b, …, Z<z

如上所示,字母表越前面的字母越小,越后面的字母越大。一个字母的大写小于他的小写。

这里提一个小问题:不同字母的大小写之间如何比较大小呢?

还不了解的同学可以执行一下下面的代码看看

print("A" < "g")
print("G" < "a")

结果是

True
True

这背后的原因是:字符串的排序规则是“所有的大写字母都小于小写字母”。用图片解释比较直观,就不多赘述了,请看下图:

lst1 = list("abcdefgABCDEFG")
print(sorted(lst1))

# result
['A', 'B', 'C', 'D', 'E', 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值