【发布时间】:2020-08-25 01:40:13
【问题描述】:
考虑到我有:
1 个整数数组转换为一个集合(命名为
neighbors)要避免的其他 3 组整数(命名为
forbidden1、forbidden2和forbidden3)
__
neighbors = {6, 12, 9}
forbidden1 = {1, 4, 7, 8}
forbidden2 = {2, 5, 0, 3}
forbidden3 = {6, 9}
__
以下哪种解决方案最有效地过滤掉第一组中的禁止值?为什么?
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)
【问题讨论】:
-
我赌
E,因为集合基本上针对成员检查进行了优化。另请注意,您可以在A和B中使用集合理解,方法是将[ ]替换为{ }。 -
对,我忘了这些。感谢您的提醒。我也会押注 E,但需要一些关于幕后发生的事情的解释。
-
这完全是另一个问题 - 确定哪些代码运行得更快是一回事,确定 为什么 它会这样做是另一回事。
标签: python filter set list-comprehension set-difference