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

标签 python

我有一个 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]

关于python - 从列表中删除嵌套(2个元素的列表)的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32166334/

相关文章:

python测试框架

Python 图形结构和令人惊讶的列表处理

python - 如何在 Mac 上使用 cx_Freeze?

Python——捕获异常的效率

python - 我们可以不使用 on_delete 只定义 models.CASCADE 吗?

python - 将 Excel 工作表(包括公式)导入 Django

python - 如何在 supervisor - linux 中为受监督的进程添加延迟

python - 如何使用python将字节字符串转换为字符串

python - 如何在 time.sleep 函数后轮询当前时间

python - 如何在 Django 中为具有多个值的多对多属性的模型创建过滤器查询集