我如何测试Python中的两个int列表是否存在相似之处,以及相似性索引是否在整个过程中具有相同的顺序?

时间:2016-12-10 16:35:01

标签: python list

以下是我到目前为止所做的精简版。我觉得我非常接近解决这个问题。我得到一个输出告诉我“ValueError:0不在列表中”

la = [] # list a
lb = [] # list b`

for i in range(len(la)):
    for j in range(len(lb)):
        if lb[j] in la and lb.index(j) >= la.index(i): #THIS LINE!!!
            print ("yes")
        else:
            print ("no") 

先谢谢!

2 个答案:

答案 0 :(得分:1)

您的代码有错误

lb.index(j) >= la.index(i)

此处j是以0开头的索引。lb.index(j)表示您在数组lb中查找0。如果不存在,则会向您提供您共享的错误ValueError: 0 is not in list

可能你正在寻找这样的东西。

la = [1] # list a
lb = [1] # list b`

for i in range(len(la)):
    for j in range(len(lb)):
        if lb[j] in la and j >= i:
            print ("yes")
        else:
            print ("no") 

答案 1 :(得分:0)

根据您的要求做出澄清,请考虑以下事项:

A = [1, 2, 3, 4, 5]
B = [3, 8, 5, 6, 7]

prev_idx_a = 0  # you need a way to check if indexes in list A increment each time
for idx_b, b in enumerate(B):
    if b in A:
        idx_a = A.index(b)
        if idx_a > prev_idx_a:  # make sure the order is not inverted
            prev_idx_a = idx_a  
        else:
            print("No") # or return a -1, raise an exception, etc...

如果检查成功,则只有在失败时才会输出。

现在,考虑到可能存在重复,即使在保留订单时:

A = [1, 2, 3, 4, 5]
B = [3, 8, 3, 5, 6, 7]

所有" 3"来到" 5"之前,但上面的代码将失败。您需要添加另一个条件才能仅测试第一次出现:

prev_idx_a = 0
prev_b = None
for idx_b, b in enumerate(B):
    if b in A:
        if b != prev_b:  # check only first occurrence
            prev_b = b
            idx_a = A.index(b)
            if idx_a > prev_idx_a:
                prev_idx_a = idx_a
            else:
                print("No")