聊聊Python String型列表求最值的问题
最近在写一个项目的时候发现了个很神奇的问题
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中做判断的时候一定要注意数据类型