2014-12-02 182 views
-1

子創建名單上有兩個列表:通過搜索蟒蛇

names = ['albert', 'bob', 'charlie'] 
padded_names = ['albertGARBAGE', 'jamesTRASH', 'bobREFUSE', 'timRUBBISH', 'charlieWASTE'] 

我想,其成員被['albertGARBABE', 'bobREFUSE', 'charlieWASTE']

綜觀其他線程,我看到類似的任務使用filter()函數來完成的列表,但我不知道如何將其應用於列表。我也許能夠迭代第一個列表並使用str.find(),但我的運氣也有限。

實際上,padded_names是列表的列表,但我可以操縱它。

效率不是我的問題,所以醜陋的解決方案是有效的:)不幸的是,我正在工作的系統僅限於python 2.6。

回答

0

你可以做到這一點很簡單:

filtered_list = [] 
for name in names: 
    for padded_name in padded_names: 
     if padded_name.find(name) >= 0: 
      filtered_list.append(padded_name) 

而且可以轉換成一個不錯的蟒蛇一個班輪:

filtered_list = [padded_name for padded_name in padded_names if any(padded_name.find(name) >= 0 for name in names)] 

如果你想使用的過濾功能,你需要設計你的自己的方法,將您的病情返回true:

def test(padded_name): 
    names = ['albert', 'bob', 'charlie'] 
    return any(padded_name.find(name) >= 0 for name in names)   

filtered_names = filter(test,padded_names) 
+0

好極了!謝謝! – 2014-12-02 17:42:54

0

過濾器看起來會禮ke:

filter(lambda x : any(name in x for name in names), padded_names) 

Filter需要兩個參數,一個函數(1st arg)應用於(可迭代)數據集(第二集)。

這使用lambda創建一個自定義函數,該函數檢查名稱是否出現在padded_names中的每個名稱中。

0

使用list comprehensionstartswith:一個襯墊

>>> [ x for x in padded_names for y in names if x.startswith(y) ] 
['albertGARBAGE', 'bobREFUSE', 'charlieWASTE']