2012-09-27 44 views
0

另一個陣列我有兩個陣列檢查如果數組的元素存在於在python

a = array([1,2,3])  
b = array([2,7]) 

現在我想檢查的元件是在B 和返回的答案應該是(假,真假)。有沒有一些簡單的方法來做到這一點,而不使用函數?

+2

這氣味像功課,[?你嘗試過什麼(http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+2

那裏的數組函數從哪裏來? numpy的? – l4mpi

+0

是的陣列功能是從numpy – user996018

回答

2

使用標準的Python列表:

>>> a = [1, 2, 3] 
>>> b = [2, 7] 
>>> tuple(x in b for x in a) 
(False, True, False) 

假設你array函數返回還支持迭代和in操作的對象,它應該工作一樣。

+0

謝謝。工作正常:) – user996018

+1

如果a和b很大,這會很慢。 –

+0

@BiRico所有有效的解決方案,雖然不知道numpy數組,但是:P – poke

0

好了,這是我如何與清單做:

>>> a = [1, 2, 3] 
>>> b = [2, 7] 
>>> result = [] 
>>> 
>>> for x in a: 
... result.append(x in b) 
... 
>>> print result 
[False, True, False] 
+0

正如其他答案顯示,這可以被壓縮到一個列表或發電機的理解 –

+2

我開始之前有任何其他人輸入我的答案。這個答案可能是不必要的冗長,但它仍然有效,可以幫助那些還沒有完全理解列表解析的人。 – Hubro

2

只使用numpy的:從(N,)

>>> (a[:,None] == b).any(axis=-1) 

(因此,我們把a(N,1)數組,然後使用numpy的廣播測試是否相等,最後得到一個(N, M)數組(假設b的形狀爲(M,) ...),然後我們檢查每行上是否有Trueany(axis=-1)

1

如何:

>>> numpy.setmember1d(a, b) 
array([False, True, False], dtype=bool) 

更新,謝謝seberg。隨着numpy的較新的verions是這樣的:

>>> numpy.in1d(a, b) 
array([False, True, False], dtype=bool) 
+0

在較新的numpy版本中,該函數被稱爲'np.in1d'(或'np.lib.arraysetops.in1d',但是最好的解決方案是使用數組,至少如果'b'不是很小。 – seberg

+0

這是超快的。您。 – user996018

相關問題