从其他列表中删除列表项

时间:2014-03-04 04:35:41

标签: python list indexing

我有一个函数,它接受一个列表列表,以及一个常规列表作为参数。基本上,这里的所有这些列表项都以唯一编号开头。我希望第二个列表的第一个元素针对第一个列表中每个列表的第一个元素进行测试,如果它们匹配,则从listo1中删除该列表。我做了一个根本不起作用的简短例子:

def deleteList(listo1, listo2):
    if (listo2 in listo1):
        listo1.remove(listo2)
        print(listo1)

def main():
    deleteList([[1000, 1],[2000, 2],[3000, 3]], [1000, 77])

所以我试图为任何以1000元素开头的东西制作listo2搜索listo1。在这种情况下,它应该从listo1中删除第一个列表[1000,1]。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您可以将列表理解用作过滤器,例如

def deleteList(listo1, listo2):
    return [item for item in listo1 if item[0] != listo2[0]]

print deleteList([[1000, 1],[2000, 2],[3000, 3]], [1000, 77])
# [[2000, 2], [3000, 3]]

如果您想将其作为就地操作,可以执行此操作

def deleteList(listo1, listo2):
    listo1[:] = [item for item in listo1 if item[0] != listo2[0]]

l1 = [[1000, 1],[2000, 2],[3000, 3]]
deleteList(l1, [1000, 77])
print l1
# [[2000, 2], [3000, 3]]

答案 1 :(得分:2)

如果你只关心listo2中的第一个元素,你可以做类似的事情:

def deleteList(listo1, listo2):
    for insidelist in listo1:
        if listo2[0] == insidelist[0]:
             listo1.remove(insidelist)
    print(listo1)

def main():
    deleteList([[1000, 1],[2000, 2],[3000, 3]], [1000, 77])