Python 基于一维列表从二维列表中删除图元

Python 基于一维列表从二维列表中删除图元,python,list,Python,List,我有两张单子 列表A(称为A):类似这样的2D列表:[[1,'aaa'],[2,'bbb'],[3,'ccc'],[4,'ddd']] 列表B(称为B):像这样的1D列表:['aaa','abc','cba','acb'] 我想根据列表B的内容从列表A中删除元素。 在本例中,预期结果为: 新列表C(称为C):[[2,'bbb'],[3,'ccc'],[4,'ddd']//因为列表B中没有元素'bbb','ccc'或'ddd' 我目前正在使用以下代码,我发现它非常慢: c = [] for ele

我有两张单子

列表A(称为A):类似这样的2D列表:[[1,'aaa'],[2,'bbb'],[3,'ccc'],[4,'ddd']]

列表B(称为B):像这样的1D列表:['aaa','abc','cba','acb']

我想根据列表B的内容从列表A中删除元素。 在本例中,预期结果为:

新列表C(称为C):[[2,'bbb'],[3,'ccc'],[4,'ddd']//因为列表B中没有元素'bbb','ccc'或'ddd'

我目前正在使用以下代码,我发现它非常慢:

c = []
for elem in a:
    if elem[1] not in b:
        c.append(elem)
有没有更好的方法来进行此移除?创建新列表并附加元素或从原始列表中删除元素更好吗


谢谢你的帮助

不是更快,但是使用列表理解可能更干净

c = [elem for elem in a if elem[1] not in b]

如果
b
非常大,则转换为集合将大大加快速度,因为列表中的查找是在线性时间
O(n)
中进行的,而集合中的查找是在恒定时间
O(1)


如果
a
'aaa',bbb',
等)的index-1元素是唯一的,那么这可能会更快,因为这样我们就可以使用
-

a_dict = {k: v for v, k in a}
b_set = set(b)

set_difference = a_dict.keys() - b_set
c = [(a_dict[k]: k) for k in set_difference]

列表
B
中也没有
'ddd'
。您可以通过将列表B设置为a来加快它的速度dictionary@RocketHazmat你说得对!我已经纠正了错误,非常感谢!我以前不知道布景是什么。。我的程序现在快了100倍。最后一种方法不适合我的情况,但它肯定能帮助其他人。
a_dict = {k: v for v, k in a}
b_set = set(b)

set_difference = a_dict.keys() - b_set
c = [(a_dict[k]: k) for k in set_difference]