Python中字符串列表执行max()输出zara的原理是什么
问题复现
涉及的代码如下:
list1 = ["xyz", "zara", "Pynative"] print(max(list1))
代码运行输出结果为zara,结果逻辑完全符合Python的内置规则,具体执行原理如下。
详细执行逻辑
- 给内置函数
max()传入字符串列表、且不指定自定义比较键(key参数)时,max()会按照Python字符串的默认比较规则,遍历列表找出最大值。 - Python字符串的默认比较规则是逐位对比字符的Unicode编码值,和字典排序逻辑一致:从字符串的第一个字符开始对比,只要某一位的字符编码分出大小,就直接判定整个字符串的大小,不再对比后续字符,比较结果和字符串长度没有直接关系。
- 对比三个字符串的首字符编码就能直接得出结果:
- "Pynative"首字符是大写
P,对应的Unicode编码为80 - "xyz"首字符是小写
x,对应的Unicode编码为120 - "zara"首字符是小写
z,对应的Unicode编码为122
- "Pynative"首字符是大写
- 第一位字符的编码大小顺序已经是
P < x < z,第一位就决出了最大值,不需要再对比后续字符,因此max()直接返回首字符编码最大的字符串zara。
你可以用内置ord()函数自行验证字符的编码值,参考代码:
# 打印三个首字符的Unicode编码 print(ord('P'), ord('x'), ord('z')) # 输出结果:80 120 122
常见误区提醒:Python字符串默认比较是大小写敏感的,所有大写英文字母的Unicode编码范围是65-90,小写英文字母是97-122,因此所有大写开头的字符串都会比小写开头的字符串小,这也是长度最长的"Pynative"反而成为三个元素中最小值的原因。
内容的提问来源于stack exchange,提问作者EkunkeOkaba
相关产品推荐
相关产品推荐

