【发布时间】:2016-10-03 10:56:17
【问题描述】:
在处理浮点数的列表/元组时是否应该避免使用 in 或 not in?它的实现是类似于下面的代码还是更复杂?
check = False
for item in list_to_search_the_value_in:
if value_to_search_for == item:
check = True
【问题讨论】:
-
您可能想看看here。
in操作符应该是首选,因为它可以利用容器提供的任何特殊容器测试(例如,set.__contains__()比list.__contains__()快很多)。问题在于float部分,因为比较来自不同来源的浮点数是否相等通常是数字上的禁忌。 -
是的。对于usual reasons,最好避免比较浮点数是否相等。
-
一种可能的替代方法是对浮点数列表进行排序,并使用二进制搜索找到最接近的匹配项,减去并检查差异是否小于给定限制。
-
@dhke: 所以如果我理解正确的话,你是说通常应该使用它,因为它的实现取决于容器类型(集合更快)但是当容器包含浮动时它应该避免。对吗?
-
@Ev.Kounis 是的,但取决于您的用例。如果您知道序列中的数字来自同一来源,那么比较浮点数是否相等并没有什么坏处。但是,如果这些数字来自不同的来源,即一个来自表格,另一个来自用户输入的结果,那么数字错误就会回来咬你。
标签: python