当前位置:主页 > 软件编程 > Python代码 >

聊聊Python String型列表求最值的问题

时间:2022-03-08 10:17:07 | 栏目:Python代码 | 点击:

最近在写一个项目的时候发现了个很神奇的问题

temp_list=['9','10','10','9','10']
print(max(temp_list)) # 9
print(min(temp_list)) # 10

最大值变成了9,而最小值变成了10。导致我在一个Excel表中的数据老是判断错误

分析之后原因如下:

如果比较字符串的大小,则比较的是字符的ASCII编码的大小。

在比较时,设置一个计数器,从零开始,一直循环到最短的那个字符结束,一位一位进行比较,

1.如果 字符串1的第n位的ASCII码值 等于 字符串2的第n位的ASCII码值
则 继续比较下一位
2.如果 字符串1的第n位的ASCII码值 大于 字符串2的第n位的ASCII码值
则 输出结果:1,表示字符串1 > 字符串2;
3.如果 字符串1的第n位的ASCII码值 小于 字符串2的第n位的ASCII码值
则 输出结果:-1 表示字符串1 < 字符串2;
4.如果 每一位的ASCII码值都相等,而且长度相同,
则 输出结果:0 表示字符串1 == 字符串2;
5.如果 字符串1是字符串2的前m位,例如 abcd 与abcdef 比较,
则 字符串1<字符串2.
原因是,到第5位时,字符串1的ASCII值是0,而字符串2的ASCII值为'e',即十进制的101,当然是字符串2大了.

这边的话,相当于是9跟1作比较,固然最后得出来的字符串‘9’大于‘10’

比较好的办法就是写个函数,把字符串转换成int型

def stringToInt(temp_list):
    tt_list=[]
    for i in temp_list:
        tt_list.append(float(i))
    return tt_list

字符串的问题虽然简单,但是很容易出错,另外,Python中做判断的时候一定要注意数据类型

您可能感兴趣的文章:

相关文章