python - 如果满足条件,则从列表列表中删除列表

标签 python list performance

我正在寻找用 Python 编写一小段代码。我有一个名为“keep_list”的列表列表,我想从中删除任何包含在另一个名为“deleteNODE”的列表中找到的特定值的子列表。

例如:

deleteNODE=[0,4]
keep_list=[[0,1,2],[0,2,3],[1,2,3],[4,5,6]]

运行代码后,结果应该是(删除任何包含 0 或 4 的列表):

keep_list=[[1,2,3]]

有什么有效的方法可以做到这一点吗?

最佳答案

我是这样做的:

[x for x in keep_list if not set(x).intersection(deleteNODE)]

因为我认为其他答案更好,所以我还在所有 3 个答案上运行了 timeit,令人惊讶的是这个答案更快。

Python 3.8.2
>>> import timeit
>>>
>>> deleteNODE=[0,4]
>>> keep_list=[[0,1,2],[0,2,3],[1,2,3],[4,5,6]]
>>>
>>>
>>> def v1(keep, delete):
...     return [l for l in keep_list if not any(n in l for n in deleteNODE)]
...
>>> def v2(keep, delete):
...     return [i for i in keep_list if len(set(i)&set(deleteNODE)) == 0]
...
>>> def v3(keep, delete):
...     return [x for x in keep_list if not set(x).intersection(deleteNODE)]
...
>>>
>>> timeit.timeit(lambda: v1(keep_list, deleteNODE), number=3000000)
7.2224646
>>> timeit.timeit(lambda: v2(keep_list, deleteNODE), number=3000000)
7.1723587
>>> timeit.timeit(lambda: v3(keep_list, deleteNODE), number=3000000)
5.640403499999998

我不是 Python 专家,所以任何人都可以理解为什么我的速度更快,因为它似乎为每次评估创建一个新的集合?

关于python - 如果满足条件,则从列表列表中删除列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61756298/

相关文章:

Python:将每个列表元素与另一个列表的特定元素相乘的列表理解方法

r - 从嵌套列表中按名称提取元素

python - numpy atleast_3d() 的行为

python - Django:是否需要扩展 AbstractBaseUser 以将电子邮件用作 USERNAME_FIELD?

list - f# 列表的交集

jquery - 如何在jsp中创建搜索文本框?

python - GPU 上的 Tensorflow matmul 计算比 CPU 上慢

C:使用大量结构会使程序变慢吗?

python - 在 Python 中计算相等的字符串

python - 使用分组边界的 SciPy 优化