在python中,如何只将一个列表与另一个列表匹配一次?

在python中,如何只将一个列表与另一个列表匹配一次?,python,Python,我有一个名为列表a的列表,其中包含注册id和参与者数量的详细信息 lista=[["222",3],["333",3],["122",4]] 我还有另外一份名单,上面有公寓的名字和床位的详细信息 listb=[["lily",4],["arnica",3],["maple",3],["aron",3]] 我只需要将lista第二列与ListB第二列匹配一次 由于我将参与者的数量分配给床位的数量,因此元素的匹配只需进行一次。一旦匹配完成,我需要打印出两个元素只匹配一次。我不需要多个匹配项,我

我有一个名为列表a的列表,其中包含注册id和参与者数量的详细信息

lista=[["222",3],["333",3],["122",4]]
我还有另外一份名单,上面有公寓的名字和床位的详细信息

 listb=[["lily",4],["arnica",3],["maple",3],["aron",3]]
我只需要将lista第二列与ListB第二列匹配一次

由于我将参与者的数量分配给床位的数量,因此元素的匹配只需进行一次。一旦匹配完成,我需要打印出两个元素只匹配一次。我不需要多个匹配项,我需要一个匹配项,如下所示:

listc=[["222",3,"arnica",3]]
我写了代码:

for unit in list a:
    for nit in list b: 
        if unit[1]==nit[1]:
            print(unit,nit)
            lista.remove(unit[0])
            lista.remove(unit[1])

但它会产生一个错误。我该怎么办?

您所做的是正确的,但是您必须在找到可能的匹配项后终止循环,否则您将获得多个匹配项

我想这对你有用

lista=[["222",3],["333",3],["122",4]]

listb=[["lily",4],["arnica",3],["maple",3],["aron",3]]

for unit in lista :
    for nit in listb :
        if unit[1]==nit[1]:
            print(unit,nit)
            break
    listb.remove(nit)
产出

(['222', 3], ['arnica', 3])
(['333', 3], ['maple', 3])
(['122', 4], ['lily', 4])