【问题标题】:check membership of a set in python [duplicate]检查python中集合的成员资格[重复]
【发布时间】:2016-09-19 13:24:59
【问题描述】:

我的 python 代码中有一个类似

的语句
msk = (var1 == 49) | (var1 == 26) | (var1 == 28)

现在,我想要一个更长的列表,而不是 (49,26,28),并且想让它可变,

我尝试了解决方案 Python equivalent of MATLAB's "ismember" function 但这并不是我想要的。

类似:

msk = (var1 == list1)

【问题讨论】:

  • 在这种情况下| 是什么?对于 Python set 操作,| 代表 set union。
  • if 49 in set or 26 in set or 28 in set:
  • 作为帖子中链接问题的副本关闭,因为它的答案之一已经提到使用np.in1d
  • 可以使用 in 运算符检查 Python 集成员资格。例如,my_set = set([1, 2, 3]) 使用 [i in my_set for i in [2, 4]]。但是,从问题的上下文来看,我不完全确定您要查找的是标题所说的内容。
  • 我会选择if your_set.union(your_list) == your_set:

标签: python numpy


【解决方案1】:

numpy.in1d 应该适用于这种情况:

a
Out[153]: array([ 1, 10, 26, 28, 40, 49])

b
Out[154]: array([26, 28, 49, 50])

检查数组a中的元素是否也在数组b中:

np.in1d(a, b)
Out[156]: array([False, False,  True,  True, False,  True], dtype=bool)

当然你也可以将它用于单个元素:

np.in1d(28, b)
Out[158]: array([ True], dtype=bool)

np.in1d(43, b)
Out[159]: array([False], dtype=bool)

【讨论】:

    【解决方案2】:

    使用set intersection operator

    import numpy as np
    
    list1 = np.Array([1, 2, 3, 49])
    list2 = np.Array([1, 2, 3, 4])
    
    msk1 = any({49, 26, 28} & set(list1))
    # => True
    
    msk2 = any({49, 26, 28} & set(list2))
    # => False
    

    这适用于 numpy 数组和常规列表。

    【讨论】:

      【解决方案3】:

      您可以使用in 运算符:

      msk = var1 in {49, 26, 28}
      

      【讨论】:

        猜你喜欢
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 2015-09-12
        • 2017-01-29
        • 1970-01-01
        相关资源
        最近更新 更多