Python 列表理解vs filter()vs set difference:过滤集合时哪一种效率最高?

Python 列表理解vs filter()vs set difference:过滤集合时哪一种效率最高?,python,filter,set,list-comprehension,set-difference,Python,Filter,Set,List Comprehension,Set Difference,考虑到我已: 1个整数数组,转换为一个名为“邻居”的集合 避免命名为禁止1、禁止2和禁止3的其他3组整数 __ __ 以下哪种解决方案最能有效地从第一组中过滤出禁止值?为什么 使用if语句和逻辑运算符以及 B/使用if语句和联合运算符理解列表| 带逻辑运算符和 具有并集运算符的D/filter| E/set与并集运算符的差| 试用了timeit python: A) 294 ns ± 28.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 lo

考虑到我已:

1个整数数组,转换为一个名为“邻居”的集合

避免命名为禁止1、禁止2和禁止3的其他3组整数

__

__

以下哪种解决方案最能有效地从第一组中过滤出禁止值?为什么

使用if语句和逻辑运算符以及

B/使用if语句和联合运算符理解列表|

带逻辑运算符和

具有并集运算符的D/filter|

E/set与并集运算符的差|


试用了timeit python:

A) 294 ns ± 28.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
B) 297 ns ± 26.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
C) 300 ns ± 31.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
D) 294 ns ± 19.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
E) 291 ns ± 21.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

都差不多

我打赌是E,因为集合基本上是为成员检查而优化的。还要注意的是,你可以在a和B中使用集合理解,用{}替换[]。对了,我忘了这些。谢谢你的提醒。我也会赌E,但需要一些关于引擎盖下发生了什么的解释。这完全是另一个问题——确定哪些代码运行得更快是一回事,确定它为什么这样做是另一回事。
[x for x in neighbors if x not in forbidden1 and x not in forbidden2 and x not in forbidden3]
[x for x in neighbors if x not in forbidden1 | forbidden2 | forbidden3]
filter(lambda x: x not in forbidden1 and x not in forbidden2 and x not in forbidden3, neighbors)
filter(lambda x: x not in forbidden1 | forbidden2 | forbidden3, neighbors)
neighbors.difference(forbidden1 | forbidden2 | forbidden3)
A) 294 ns ± 28.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
B) 297 ns ± 26.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
C) 300 ns ± 31.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
D) 294 ns ± 19.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
E) 291 ns ± 21.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)