以下是我到目前为止所做的精简版。我觉得我非常接近解决这个问题。我得到一个输出告诉我“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")
先谢谢!
答案 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")