Python大于/小于运算符使用异常,8被判定大于40如何解决?
问题原因
你当前传入的输入列表所有元素、以及要比较的阈值都是字符串类型,而非整数类型。Python中字符串的大小比较逻辑是逐位对比字符的ASCII编码值:
对比'8'和'40'时,第一位先比'8'和'4',字符'8'的ASCII码(56)远大于'4'的ASCII码(52),所以会直接判定'8' > '40'为真,因此8会被错误筛选进结果。
解决方法
有两种常用的修正方案:
- 方案1:提前把输入列表和阈值转为整数类型,推荐该方案,后续如果有其他数值运算也不需要重复转类型
# 先把输入列表所有元素转成整数 inLst = [int(i) for i in ['23', '67', '8', '90', '56', '45', '38', '69', '30', '68']] # 阈值也转成整数 n = int('40') def displaylarger(): greater = [i for i in inLst if i > n] print(greater) # 调用后输出正确结果:[67, 90, 56, 45, 69, 68]
- 方案2:在列表推导式比较时临时转类型,适合不需要保留原始字符串数据的场景
inLst = ['23', '67', '8', '90', '56', '45', '38', '69', '30', '68'] n = '40' def displaylarger(): greater = [i for i in inLst if int(i) > int(n)] print(greater)
内容的提问来源于stack exchange,提问作者TempoR0
相关产品推荐
相关产品推荐

