2010-01-28 62 views
45

鑑於列表['a','ab','abc','bac'],我想計算一個列表,其中包含'ab'的字符串。即結果是['ab','abc']。這怎麼可以在Python中完成?根據內容過濾字符串列表

>>> l = ['a', 'ab', 'abc', 'bac'] 
>>> [x for x in l if 'ab' in x] 
['ab', 'abc'] 
>>> 

爲什麼這項工作:

+0

感謝禮Bendersky – 2010-01-28 08:33:41

+0

給出的列表[」 a','b','c','a','b'],我想計算一個帶有'a'和'b'的字符串列表。即結果是['a','b']。這怎麼可以在Python中完成? – 2010-01-28 08:35:32

回答

71

這種簡單的過濾可以在Python中的許多方式來實現。最好的方法是如下使用 「列表理解」:

>>> lst = ['a', 'ab', 'abc', 'bac'] 
>>> res = [k for k in lst if 'ab' in k] 
>>> res 
['ab', 'abc'] 
>>> 

另一種方法是使用filter功能:

>>> filter(lambda k: 'ab' in k, lst) 
['ab', 'abc'] 
>>> 
+0

-1:Lambda。請不要在n00bs上施加lambda。 – 2010-01-28 11:53:27

+26

@ S.Lott:爲什麼?在適當的環境中學習有用的高級編程主題有什麼問題? – 2010-01-28 12:23:08

+0

@Edi Bendersky:因爲他們比有用的更混亂?因爲它會導致回答「使用def」的問題?因爲它很少會比代碼高爾夫更好嗎?我不知道,經過30多年的各種語言編程之後,它們對我來說似乎毫無用處。但我想他們對你真的很重要。 – 2010-01-28 12:33:19

12
[x for x in L if 'ab' in x] 
+0

你贏了48秒:-) – 2010-01-28 07:20:34

3

在交互shell快速試過了這一點?因爲in operator是爲字符串定義的:「是...的子串」。

而且,你可能要考慮寫出來的循環,而不是使用上面所用的list comprehension syntax

l = ['a', 'ab', 'abc', 'bac'] 
result = [] 
for s in l: 
    if 'ab' in s: 
     result.append(s) 
0
mylist = ['a', 'ab', 'abc'] 
assert 'ab' in mylist 
5
# To support matches from the beginning, not any matches: 

list = ['a', 'ab', 'abc', 'bac'] 
prefix = 'ab' 

filter(lambda x: x.startswith(prefix), list)