2016-11-13 28 views
0

當前代碼非常短。如果我正確理解「in」函數,那麼不應該for循環迭代並返回True,如果[1,3]都在[1,4,5]中?現在,我的所有測試都成功了。我覺得有一個簡單的解決辦法,我只是不知道。無法使用「in」功能檢查另一個陣列的遏制

我試着把if語句放在for和return行之間,但是它仍然只返回true。

def innerOuter(arr1, arr2): 
    for arr1 in arr2: 
     return True 
    return False 

回答

3

你必須使用if one_element in array

def innerOuter(arr1, arr2): 
    for x in arr1: 
     if x not in arr2: 
      return False 
    return True 

innerOuter([1,3], [1,4,5]) # False 
innerOuter([1,4], [1,4,5]) # True 

或者您可以使用set()檢查它

def innerOuter(arr1, arr2): 
    return set(arr1).issubset(set(arr2)) 

innerOuter([1,3], [1,4,5]) # False 
innerOuter([1,4], [1,4,5]) # True 

相同:

def innerOuter(arr1, arr2): 
    return set(arr1) <= set(arr2) 

https://docs.python.org/2/library/sets.html#set-objects

+0

這工作。我不熟悉「不」作爲語法。謝謝 – grilam14

0

當前的代碼將返回True在ARR2每一個元素,你要找的是什麼if arr1 in arr2:

+1

返回true用於第一元件;如果它是一個生成器('yield'而不是'return'),它會像你說的那樣做,但是正確的代碼是正確的(儘管在arr2中返回arr1也是可行的)。 – Valkyrie

+0

是的,謝謝你,這是我的一個疏忽。我不知道'arr2中的返回arr1',如果知道 – Eric

+0

'如果[1,4,5]'中的[1,4]不起作用就很有用。 '[1,4,5]中的[1,4]'返回不起作用。 – furas