【发布时间】:2016-10-01 05:12:02
【问题描述】:
给定两个不同长度的列表,但具有大部分相似(或重叠)的值,例如:
ls_1 = [7, 26, 26, 55, 69, 71, 73, 80, 121, 124, 126, 127,
131, 133, 144, 153, 153, 159, 160, 210, 219, 221,
235, 235, 241, 243, 289, 299, 300, 309, 327, 327,
328, 391, 419, 421, 423, 433]
ls_2 = [7, 28, 28, 60, 69, 81, 121, 124, 125, 127, 131, 133,
144, 153, 153, 159, 160, 210, 219, 221, 235, 235, 241,
243, 327, 327, 330, 391, 419, 421, 423, 433]
有没有一种简单的方法可以用零填充列表 2 中的“缺失”值,以便列表长度匹配?
编辑:我正在尝试通过在 最有可能 被发现的位置放置零来使列表具有相同的确切长度。此处的可能性旨在作为列表 1 中的 item[i] 和列表 2 中的 item[i] 之间的测量距离。
注意1:我知道这个问题没有很好的定义。例如,一个有用的答案会为我指出一种比较列表中的项目并找到可能的阈值的方法。
注意2:列表总是排序的,性能不是大问题。
示例:在值 69 和 81 之间插入两个零,在 330 和 391 之间插入更多其他零。
到目前为止,我的方法是计算值之间的差异,当 difference > some_treshold 时,我会做 ls_2.insert。
然而,这似乎不是最简单的方法,因为它需要一个任意阈值。
for i in range(len(ls_2)):
distance = ls_2[i] - ls_1[i]
if distance > 3:
ls_2.insert(i, 0)
print(len(ls_2), len(ls_1)) #double-checking, lengths are the same.
我专门问这个问题是因为它引出了另一个问题,即如何比较不同大小的整数列表。我想到的是,通过执行此处描述的填充将使我能够实现更直接的算法,例如 cos 距离和欧几里得距离。最终目标是填充大量列表,并根据与参考整数列表的相似度对它们进行排名。
让我知道这一切是否有意义,或者是否有更直接的方法来解决它。 (如果发布两个单独的问题更合适)。
【问题讨论】:
-
输入列表总是排序的吗?是否需要维护顺序,包括列表中间的零?还是只需要零来占用列表中的空间?
-
第一步:提出问题的准确措辞和预期的解决方案。在明确定义“缺失”的含义之前,您无法引入精确度。
-
感谢您的反馈。我将编辑问题。