【问题标题】:Padding zeros into list at specific positions在特定位置将零填充到列表中
【发布时间】: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 距离和欧几里得距离。最终目标是填充大量列表,并根据与参考整数列表的相似度对它们进行排名。

让我知道这一切是否有意义,或者是否有更直接的方法来解决它。 (如果发布两个单独的问题更合适)。

【问题讨论】:

  • 输入列表总是排序的吗?是否需要维护顺序,包括列表中间的零?还是只需要零来占用列表中的空间?
  • 第一步:提出问题的准确措辞和预期的解决方案。在明确定义“缺失”的含义之前,您无法引入精确度。
  • 感谢您的反馈。我将编辑问题。

标签: python sorting padding


【解决方案1】:
ls_2.insert(ls_2.index(81), 0)

将在值81 之前插入一个零,重复一遍,你就有了两个零。将ls_2.index(81) 的结果缓存在一个变量中以加快速度。

【讨论】:

  • 这是一个玩具示例。我需要一个更大列表的解决方案,以及其中的各种。手动操作不会有太大帮助。
  • 附带说明,将阈值增加到 5 也可以在 69 和 81 @Anthon 之间添加零。
【解决方案2】:

ls_2 的末尾添加 0。正如你所指出的,不在两者之间。这大大降低了复杂性。

类似:

ls_1_length = len(ls_1)
ls_2_length = len(ls_2)
length_diff = ls_1_length - ls_2_length
for index in length_diff:
    ls_2.append(0)

关于你问题的第二部分。如果要比较两个可变大小的列表,为什么要使这两个列表大小相同?

希望这会有所帮助。

【讨论】:

  • 1.我正在寻找向量之间的欧几里德距离,因此我需要填充它们不匹配的地方。如果我在末尾添加零,则欧式距离公式将不起作用。
  • 2.欧几里得距离或余弦距离要求向量的长度相同
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2013-04-19
  • 2021-10-15
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多