Skip to main content
 首页 » 编程设计

python之从列表中删除嵌套(2个元素的列表)的简单方法

2025年05月04日14lexus

我有一个 input_list = [[1,2],[1,3],[1,4],[2,8],[2,10]]

然后我有一个 elimination_list = [[1,2],[2,8]]

然后我用输入列表的元组创建一个result_list,除了那些在 elimination_list 中找到的元组

因此 result_list = [[1,3],[1,4],[2,10]]

我可以像下面这样使用多个 for 循环来实现这一点,但是有什么方法可以用更少的代码行来做到这一点吗?

for x,y in input_list: 
    is_eliminate = 0 
    for a,b in elimination_list: 
        if x == a and y == b: 
            is_eliminate = 1 
 
    if is_eliminate == 0: 
        result_list.append([x,y]) 

请您参考如下方法:

您可以只使用包含测试(in)和列表理解:

result_list = [t for t in input_list if t not in elimination_list] 

t not in elimination_list 负遏制测试将遍历整个 elimination_list 以查看该元素是否存在。

如果您可以将列表转换为实际的元组,则可以使用更快的选项设置成员资格测试:

input_list = [(1, 2), (1, 3), (1, 4), (2, 8), (2, 10)] 
elimination_set = {(1, 2), (2, 8)} 
result_list = [t for t in input_list if t not in elimination_set] 

这里 eliminitaion_set 是一个包含元组(不可变序列)的集合,不在 eliminitaion_set 中的 t 使用散列算法来确定任何给定的元组是否是平均 O 中的成员(1)(常数)时间。

不过,您没有将input_list 转换为元组;您可以仅在测试时进行转换:

input_list = [[1, 2], [1, 3], [1, 4], [2, 8], [2, 10]] 
elimination_set = {(1, 2), (2, 8)} 
result_list = [t for t in input_list if tuple(t) not in elimination_set]