【发布时间】:2013-09-19 02:24:39
【问题描述】:
背景:
我的 Python 程序处理的数据量比较大,可以在程序内生成,也可以导入。然后处理数据,在其中一个过程中,故意复制数据,然后对其进行操作,清除重复项,然后将其返回给程序以供进一步使用。我正在处理的数据非常精确(最多小数点后 16 位),并且将这种精度保持在至少 14dp 是至关重要的。但是,数学运算当然可以在我的浮点数中返回细微的变化,例如两个值与 14dp 相同,但可能与 16dp 略有不同,因此意味着内置 set() 函数无法正确删除此类“重复” (我用这种方法对这个想法进行了原型设计,但是对于完成的程序来说并不令人满意)。我还应该指出,我很可能忽略了一些简单的事情!我只是想看看其他人想出什么 :)
问题:
从可能非常大的数据中删除非常接近重复的最有效方法是什么设置?
我的尝试:
我已经尝试将值本身四舍五入到 14dp,但这当然不能令人满意,因为这会导致更大的错误。我有这个问题的潜在解决方案,但我不相信它尽可能高效或“pythonic”。我的尝试涉及查找与 x dp 匹配的列表条目的索引,然后删除其中一个匹配的条目。
提前感谢您的任何建议!请让我知道您是否希望澄清任何事情,或者当然,如果我忽略了一些非常简单的事情(我可能正在考虑过度)。
澄清“重复”:
我的“重复”条目之一的示例:603.73066958946424、603.73066958946460,该解决方案将删除其中一个值。
关于十进制.Decimal 的注释:
如果保证所有导入的数据没有一些近乎重复的数据(它经常这样做),这可能会起作用。
【问题讨论】:
-
假设您对“接近”的定义是“差小于 2”。获取列表
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]。 “删除附近的重复项”应该怎么做?您对近似重复的定义需要是可传递的
标签: python list python-2.7 duplicates