将零填充到特定位置的列表中

时间:2016-09-30 20:17:33

标签: python sorting padding

给出两个不同长度的列表,但大多数相似(或重叠)的值如:

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]之间的测量距离相同。

Note1 :我知道问题没有明确定义。例如,一个有用的答案就是指出一种比较列表中的项目并找到可能的阈值的方法。

Note2 :列表总是排序,性能不是大问题。

示例:在值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距离和欧氏距离。最终目标是填充大量列表,并按照与整数引用列表的相似性对它们进行排名。

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

2 个答案:

答案 0 :(得分:0)

ls_2.insert(ls_2.index(81), 0)

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

答案 1 :(得分:0)

通过在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)

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

希望这有帮助。