很多刚学 Python 的同学在遇到字符串比较时都会困惑:为什么 "watermelon" > "strawberry" 结果是 True?为什么 "apple" < "banana"?字母到底是按什么规则比大小的?

这篇文章就从字符编码出发,把 Python 字符串比较的底层逻辑、判断规则、常用函数一次性讲透,看完你再也不会踩坑。


一、字符串比较的本质:比的不是长度,是「编号」

Python 里两个字符串比较大小(><==>=<=),不是比长度,也不是比单词含义,而是在比每个字符的编号

这个编号官方名字叫:Unicode 编码(兼容最经典的 ASCII 编码)。

简单理解:计算机不认识字母、数字、符号,只认识数字。所以人类给每个字符分配了一个唯一的数字编号,这个编号就是字符在计算机里的 “身份证号”。

字符串比较 = 逐个字符对比「身份证号」 → 编号大的字符更大。

二、最常用字符编码表(背会直接起飞)

日常编程 99% 的场景,只需要记住下面这张表:

表格

字符类型 编码范围 重要示例
数字 0~9 48 ~ 57 '0'=48,'9'=57
大写字母 A~Z 65 ~ 90 'A'=65,'B'=66 … 'Z'=90
小写字母 a~z 97 ~ 122 'a'=97,'b'=98 … 'z'=122

    三个黄金规律(考试、刷题必用)

  1. 数字 < 大写字母 < 小写字母48~57 < 65~90 < 97~122
  2. 同一类字符按顺序递增'a' < 'b' < ... < 'z''A' < 'B' < ... < 'Z''0' < '1' < ... < '9'
  3. 大小写相差 32小写字母编码 = 大写字母编码 + 32例:'A'=65 → 'a'=97

三、两个神器函数:ord () 和 chr ()

Python 提供了两个内置函数,让你直接查看 / 转换字符编码:

1. ord (字符) → 查编号

print(ord('a'))   # 97
print(ord('s'))   # 115
print(ord('w'))   # 119
print(ord('A'))   # 65
print(ord('0'))   # 48

2. chr (编号) → 查字符

print(chr(97))   # 'a'
print(chr(65))   # 'A'
print(chr(48))   # '0'

这两个函数是理解字符串比较的核心钥匙。

四、字符串比较的完整规则(详细版)

Python 比较两个字符串时,遵循字典序

  1. 从左到右逐个字符对比
  2. 只要某一位分出大小,立刻停止,不再看后面
  3. 完全一样才返回 True

举个真题例子:

a = "watermelon"
b = "strawberry"

print(a > b)   # 结果是?

一步一步判断:

  1. 取第一个字符:a[0] = 'w',编号 119b[0] = 's',编号 115
  2. 比较编号:119 > 115 → True
  3. 直接得出结论:a > b → True

后面的字符根本不用看!

五、更多经典对比示例(帮你彻底巩固)

# 数字 < 大写 < 小写
print('0' < 'A')       # True  48 < 65
print('A' < 'a')       # True  65 < 97

# 同类型按顺序
print('a' < 'b')       # True
print('s' < 'w')       # False
print('Apple' < 'Banana') # True

# 字符串长短不影响!
print("a" < "aaaaaaa") # True 只比第一位

六、实战应用:用编码判断字符类型

学会编码后,你可以不用任何库,直接判断字符类型:

1. 判断是否小写字母

c = 'm'
if 97 <= ord(c) <= 122:
    print("小写字母")

2. 判断是否大写字母

c = 'M'
if 65 <= ord(c) <= 90:
    print("大写字母")

3. 判断是否数字

c = '5'
if 48 <= ord(c) <= 57:
    print("数字字符")

七、进阶:利用编码实现大小写转换

虽然 Python 有 upper()lower(),但理解底层更重要:

# 小写 → 大写
c = 'a'
upper_c = chr(ord(c) - 32)
print(upper_c)   # 'A'

# 大写 → 小写
c = 'A'
lower_c = chr(ord(c) + 32)
print(lower_c)   # 'a'

原理就是:大小写编码差固定为 32

八、超简总结(建议收藏)

  1. Python 字符串比大小 = 逐个字符比Unicode/ASCII 编号
  2. 顺序固定:数字 < 大写字母 < 小写字母
  3. 小写字母 = 大写字母 + 32
  4. ord(字符) 查编号,chr(编号) 查字符
  5. 比较规则:从左到右,一位定胜负,不看长度

只要记住这几句话,所有字符串比较的题目、代码、坑点,你都能一眼看穿。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐