如何在保留列表顺序的同时将末尾为.0的浮点数转为整数?
解决列表中.0结尾浮点数转整数的需求
没问题,这个需求很容易实现,我给你两种方案,既保证转换准确,又能维持原列表的顺序:
方案一:简洁的列表推导式(推荐)
一行代码就能搞定,用Python内置的is_integer()方法来判断浮点数是否为整数(也就是末尾是.0的情况),这个方法比字符串判断更可靠,不会因为浮点数的底层表示问题出错:
original_list = [1.0, 3.0, 1.0, 1.43, 1.0, 8.0, 4.0, 8.98, 2.0, 2.0, 2.0, 5.0, 7.0, 72.0, 3.0, 3.0, 3.0, 7.0, 9.0, 9.0, 4.0, 4.0, 4.0, 4.0, 8.7, 43.0, 5.89, 5.0, 5.0, 5.0, 322.0, 7.0, 6.0, 6.0, 6.0, 102.0] processed_list = [int(num) if num.is_integer() else num for num in original_list]
运行后得到的结果完全符合你的预期:
[1, 3, 1, 1.43, 1, 8, 4, 8.98, 2, 2, 2, 5, 7, 72, 3, 3, 3, 7, 9, 9, 4, 4, 4, 4, 8.7, 43, 5.89, 5, 5, 5, 322, 7, 6, 6, 6, 102]
方案二:直观的for循环写法
如果刚接触Python,觉得列表推导式有点抽象,可以用普通循环来实现,逻辑和上面完全一致:
original_list = [1.0, 3.0, 1.0, 1.43, 1.0, 8.0, 4.0, 8.98, 2.0, 2.0, 2.0, 5.0, 7.0, 72.0, 3.0, 3.0, 3.0, 7.0, 9.0, 9.0, 4.0, 4.0, 4.0, 4.0, 8.7, 43.0, 5.89, 5.0, 5.0, 5.0, 322.0, 7.0, 6.0, 6.0, 6.0, 102.0] processed_list = [] for num in original_list: # 判断当前浮点数是否为整数(即末尾是.0) if num.is_integer(): processed_list.append(int(num)) else: processed_list.append(num)
补充说明
为什么不用字符串判断?比如str(num).endswith('.0')?
因为某些浮点数可能因为精度问题,显示出来不是.0但实际是整数(比如10.0可能在某些情况下被表示为9.999999999999998),而is_integer()方法会准确判断数值本身是否为整数,避免这类问题。
内容的提问来源于stack exchange,提问作者user12369128
相关产品推荐
相关产品推荐

