gpt4 book ai didi

python - 基于一维列表从二维列表中删除元素

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:40 29 4
gpt4 key购买 nike

我有 2 个列表

List A (called a) : 2D list like this : [[1,'aaa'],[2,'bbb'],[3,'ccc'],[4,'ddd']]

List B (called b) : 1D list like this : ['aaa','abc','cba','acb']

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

New List C (called c) : [[2,'bbb'],[3,'ccc'],[4,'ddd']] //Since there is no element 'bbb', 'ccc' or 'ddd' in the list B

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

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)

b_set = set(b)
c = [elem for elem in a if elem[1] not in b_set]

如果 a 的索引 1 元素('aaa'、'bbb'、 等)唯一,那么这可能是甚至更快,因为这样我们就可以使用 set difference operator -

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]

关于python - 基于一维列表从二维列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55223902/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com