Python中文字符排序、英文字符排序、数值排序的本质比较和区别【刘金玉的Python笔记06】

简介: Python中文字符排序、英文字符排序、数值排序的本质比较和区别【刘金玉的Python笔记06】

综述

在python编程中我们通常会对一个列表中的元素进行排序,而排序最为常用的自然就是列表自带的函数sort()了。

经常使用Python的朋友肯定知道sort()函数默认是按照将列表中的元素进行从小到大排序的,这其实只是初步的认识。

数值比较

4b1e5e5c0f3fdc3012fa5521bd81d7a3.png


有一定计算机基础的朋友会想到更深一层的知识,你会想到我们平时列表中的数值到底是怎么排序的?当然,我们马上会想到排序的算法。排序算法的核心就是数值大小的比较,再深入就是具体到哪个排序算法了。

能想到以上知识的同学已经算是很不错的了哦!

字母字符比较

e12fd24b11106c291af3e64b9d3c5b4b.png

在多次实践中,我们的排序其实不仅会涉及用到数值,还会使用到字母的排序,当然有一定计算机基础的同学马上会想到比较的本质还是数值大小的比较,同时会想到字符串或者字符会将字母转为ascii码,然后使用数值进行大小比较。是的,能实践到字母比较的同学已经挺厉害的了哦!

这里顺便献上ascii码对照表给您!放大查看哦!

3390346b3efa9bb909449651ff05b45d.jpg

是的,常用字母和符号的大小比较和排序,本质就是根据以上ASCII码表来实行的。那么中文怎么办呢?

中文字符比较

b700007defcc2898727db46d62860203.png

为了解决各国文字不同并且ascii码因只有128个字符而不够用的问题,国际联合组织就协定了一个国际通用的utf-8的编码格式。这个编码格式厉害了,在各国文字不同的情况下,字符仍然不会出现错误转换的问题。这就是unicode编码的出现了。

unicode编码其实也是有一个字符和数值对照表的,但是这个表实在太大,不太好展示,但是学习过刘金玉编程的同学却是可以通过for循环以及字符和数值转换函数的结合使用,就能轻易做到输出这个对照表了。

我们先来看一下以上我的名字组成的字符,为什么会在排序时出现颠倒的效果?

我们先对字符做一下比较看看:

8a79715a64fc2844dbfe689709f3c328.png

我们发现‘玉’比‘金’大,结果是false(为假),所以其实应该是‘玉’小于等于‘金’这个字符。

第二条测试中‘玉’比‘金’要小(为真)。

从以上两条测试中,我们发现,中文的比较,其实在本质上应该也是一个数值大小的比较,那么这个数值大小该怎么看呢?

需要通过ord函数观察。

我们这里分别对‘刘金玉’这三个字符做一个字符与数值对照的转换。

7ad522d89207476af54e1b151ee1c9fb.png

通过以上转换的结果,我们就可以对sort()函数排序的结果一目了然了。本质上就是利用的是unicode字符转换的数值排序。

是啊!中文字符在国际通用的utf-8编码中也是有对应的数值大小的。

这里要注意的是,我们当前使用的Python环境默认是使用什么编码格式比较重要。一般来说都是utf-8编码格式,当然也不排除意外,所以大家最好通过导入sys库,利用getdefaultencoding()函数去获取一下编码环境的情况。

可以用以下代码:

>>> import sys

>>> sys.getdefaultencoding()

'utf-8'

这样我就得到了当前环境的编码格式了。

unicode编码与区位码

值得我们注意的是unicode编码和区位码有所不同。我们用的unicode编码是针对国际交流使用的编码格式,而区位码则是针对中文的gb2312编码格式的数值,它们是有所不同的,当然也有一定的算法可以转换,感兴趣的朋友可以搜索gbk_convert_to_utf8关键词可以看到一些相关的算法和代码书写。

d6489c398cda6697ea2851ef422f8e69.png

相关文章
|
1月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
47 0
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
75 0
|
7天前
|
人工智能 Shell 开发工具
[oeasy]python0041_输出ASCII码表_英文字符编码_键盘字符_ISO_646
本文介绍了ASCII码表的生成与使用,包括英文字符、数字和符号的编码。通过Python代码遍历0到127的ASCII值,解决了找不到竖线符号的问题,并解释了ASCII码的固定映射关系及其重要性。文章还介绍了ASCII码的历史背景,以及它如何成为国际标准ISO 646。最后,通过安装`ascii`程序展示了完整的ASCII码表。
9 1
|
9天前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
23 1
|
11天前
|
人工智能 开发工具 Python
[oeasy]python040_缩进几个字符好_输出所有键盘字符_循环遍历_indent
本文探讨了Python代码中的缩进问题。通过研究`range`函数和`for`循环,发现缩进对于代码块的执行至关重要。如果缩进不正确,程序会抛出`IndentationError`。文章还介绍了Python的PEP8规范,推荐使用4个空格进行缩进,并通过示例展示了如何使用Tab键实现标准缩进。最后,通过修改代码,输出了从0到122的字符及其对应的ASCII码值,但未能找到竖线符号(`|`)。文章在总结中提到,下次将继续探讨竖线符号的位置。
11 0
|
1月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
21 3
|
1月前
|
存储 开发工具 Python
【Python项目】外星人入侵项目笔记
【Python项目】外星人入侵项目笔记
36 3
|
1月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
41 0
【免费分享编程笔记】Python学习笔记(二)
|
1月前
|
存储 大数据 数据处理
Python 中的列表推导式与生成器:特性、用途与区别
Python 中的列表推导式与生成器:特性、用途与区别
23 2
|
1月前
|
存储 C语言 Python
解密 Python 的变量和对象,它们之间有什么区别和联系呢?
解密 Python 的变量和对象,它们之间有什么区别和联系呢?
21 2