2017-07-17 67 views
0
a1 = ['arp', 'bull', 'mice'] 
a2 = ["lively", "alive", "harp", "sharp", "armstrong"] 

我需要它返回:返回數組排序在字典順序蟒蛇

['arp'] 

我的代碼是:

def in_array(array1, array2): 
    x = array1 
    return sorted(x) 

其適用於:

a1 = ["live", "arp", "strong"] 
a2 = ["lively", "alive", "harp", "sharp", "armstrong"] 
r = ['arp', 'live', 'strong'] 

怎麼辦我通過一個數組進行排序,並只匹配那些已排序的元素是a2的子串嗎?

+0

你想*排序*?或*過濾器*? –

+0

我想排序並過濾 –

回答

0

您可以簡單地用一個filter,並檢查是否有a2any(..)元素包含了這樣的字符串:

def in_array(a1,a2): 
    return filter(lambda e1: any(e1 in e2 for e2 in a2),a1) 

在你想要的結果一併整理的情況下,你可以使用sorted(..)

def in_array(a1,a2): 
    return sorted(filter(lambda e1: any(e1 in e2 for e2 in a2),a1)) 

如果你想消除重複,你可以使用set(..)

​​

該算法將在爲O(n×米+ N ×的log(n))與Ñ元件的數量在a1,和a2元素數運行。

如果您可以對ar2進行預處理(並生成例如trie),則可以通過O(n)提高算法複雜度。但是,如果a1中元素的數量與a2中元素的數量相比是很大的,那麼這是有益的。

+0

謝謝!現在它只通過了一項測試。我需要它不返回重複項(只返回1份)。我不熟悉lambda如何工作,但我正在閱讀它。任何關於我如何去做這件事的建議? –