【问题标题】:Checking if a element of a set exists in another set [duplicate]检查一个集合的元素是否存在于另一个集合中[重复]
【发布时间】:2018-08-02 13:16:53
【问题描述】:

假设我有两个 pyomo 集 A 和 B,它们包含以下元素:

m.A = {1,2,3,4,5}
m.B = {a,b,c,d,5}

我想检查;如果 A 有一些也在 B 中的元素:

编辑:

以下不起作用

if m.A & m.B is not None:
    raise ValueError

至少在我的情况下,m.A = [None]m.B = ['some_string'] 也会触发 if 语句,但 bool(m.A & m.B) 正在工作。

【问题讨论】:

  • if a & b 是你想要的
  • 这两个集合的交集对你有用吗? “m.A & m.B”会给你两个集合中都存在的元素......
  • @npobedina 我认为你是对的,像if m.A & m.B == None: 这样的东西会起作用。
  • stackoverflow.com/q/3170055/5270581 的帖子已经回答了您的问题。
  • Dupe 从列表开始,而不是从集合开始,但答案就是你需要的。

标签: set elements pyomo


【解决方案1】:

实现此目的的最紧凑方法是使用 & 运算符

a = {1,2,3,4}
b = {4,5,6}
result = bool(a & b)

速度对比

使用& 运算符:

%timeit bool(a & b)
297 ns ± 3.04 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

使用intersection 方法:

%timeit bool(a.intersection(b))
365 ns ± 27.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

这两个解决方案非常相似,第二个很可能面临方法调用的开销。

【讨论】:

  • 好吧,我会尝试两者,唯一的问题可能是我:它们不是普通的 python 列表,因此我不确定 .intersection 是否有效。或布尔()。我会尝试然后在这里更新。
  • 这些是应用于集合的方法,而不是列表。 Bool 将结果转换为布尔值,因为它对于空集 {} 返回 False,对于非空集 {something} 返回 true。
【解决方案2】:

您正在寻找intersection:

>>> A = {1,2,3,4,5}
>>> B = {'a','b','c','d',5}
>>> A.intersection(B)
set([5])

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 2011-05-23
    • 1970-01-01
    • 2015-03-22
    • 2021-04-05
    • 2021-12-13
    • 2020-07-23
    • 2012-03-31
    • 2014-04-19
    相关资源
    最近更新 更多