【问题标题】:Test if every element of an array is in another array [duplicate]测试数组的每个元素是否在另一个数组中[重复]
【发布时间】:2018-08-14 13:47:59
【问题描述】:

假设我有两个数组xy,其中yx 的子集:

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [3, 4, 7]

我想返回一个数组,如:

ret = [False, False, True, True, False, False, True, False, False]

如果y 只是一个数字,那将很容易(x == y),但我尝试了等效的x in y,但它不起作用。当然,我可以用 for 循环来做,但我宁愿有一个更简洁的方法。

我已经标记了这个 Pandas,因为 x 实际上是一个 Pandas 系列(数据框中的一列)。 y 是一个列表,但如果需要,可以将其设为 NumPy 数组或系列。

【问题讨论】:

  • ret = [num in y for num in x]
  • 自从你给 pandas 加了标签,我已经关闭了。

标签: python python-3.x pandas numpy


【解决方案1】:
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [3, 4, 7]
print([x in y for x in x])

【讨论】:

  • (ab) 不推荐使用 x 这样的 (for x in x)。还有更多的字母可供选择。 xD
  • @Ev.Kounis 我喜欢它。 “(ab)使用”。不错!
【解决方案2】:

IIUC:

s = pd.Series(x)
s.isin(y)

输出:

0    False
1    False
2     True
3     True
4    False
5    False
6     True
7    False
8    False
dtype: bool

返回列表:

s.isin(y).tolist()

输出:

[False, False, True, True, False, False, True, False, False]

【讨论】:

    【解决方案3】:

    Set Intersection 也可以为您做到这一点。

    a = [1,2,3,4,5,9,11,15]
    b = [4,5,6,7,8]
    c = [True if x in list(set(a).intersection(b)) else False for x in a]
    
    print(c)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2012-08-29
      • 2015-08-15
      • 2021-01-30
      相关资源
      最近更新 更多