给定两个列表/向量,其中一个是另一个的子集,我如何以最有效的方式对齐它们?



给定两个列表/向量,其中一个是另一个的子集,我如何以最有效的方式对齐它们?对于上下文,我正在切片矩阵(在c++中),我还需要切片标签。因为这些列表都是标签,所以它们在列表中应该是唯一的。

import unittest
from typing import List, Tuple 
def doAlignment(list1: List[int], list2: List[int]) -> Tuple[int, int]:
pass
#The elements in the lists are labels, so they should be unique - i.e. we won't 
# ever have [5, 5, 6, 7, 8].
class AlignTests(unittest.TestCase):

def test1(self):
v1 = [1, 2, 3, 4, 5, 6]
v2 = [1, 2]
first, last = doAlignment(v1, v2)
self.assertEqual((0, 1), (first, last))

def test2(self):
v1 = [1, 2, 3, 4, 5, 6]
v2 = [2, 3, 4]
first, last = doAlignment(v1, v2)
self.assertEqual((1, 3), (first, last))
def test3(self):
v1 = [7, 3, 4, 6, 9]
v2 = [3, 4, 6]
first, last = doAlignment(v1, v2)
self.assertEqual((1, 3), (first, last))

def test4(self):
v1 = [7, 3, 4, 6, 9]
v2 = [3, 4, 6, 9]
first, last = doAlignment(v1, v2)
self.assertEqual((1, 4), (first, last))

list1中的值是唯一的,把第一项的索引list2第一个元组值,添加len(list2)-1第二:

def doAlignment(list1: List[int], list2: List[int]) -> Tuple[int, int]:
a = list1.index(list2[0])
return (a, a+len(list2)-1)

的例子:

>>> doAlignment([7, 3, 4, 6, 9], [3, 4, 6, 9])
(1, 4)

最新更新