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

2024-09-30 18:30:49 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑到我已:

  • 1个整数数组,转换为一个集合(名为neighbors

  • 要避免的3组其他整数(命名为forbidden1forbidden2forbidden3

_uuu

neighbors = {6, 12, 9}
forbidden1 = {1, 4, 7, 8}
forbidden2 = {2, 5, 0, 3}
forbidden3 = {6, 9}

_uuu

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

A/使用if语句和逻辑运算符and进行列表理解

[x for x in neighbors if x not in forbidden1 and x not in forbidden2 and x not in forbidden3]

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

[x for x in neighbors if x not in forbidden1 | forbidden2 | forbidden3]

C/filter()和逻辑运算符and

filter(lambda x: x not in forbidden1 and x not in forbidden2 and x not in forbidden3, neighbors)

D/filter()和联合运算符|

filter(lambda x: x not in forbidden1 | forbidden2 | forbidden3, neighbors)

E/使用并集运算符设置差|

neighbors.difference(forbidden1 | forbidden2 | forbidden3)

Tags: andin列表ifnotneighbors运算符整数
1条回答
网友
1楼 · 发布于 2024-09-30 18:30:49

已试用(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)

都差不多

相关问题 更多 >