鑑於列表['a','ab','abc','bac']
,我想計算一個列表,其中包含'ab'
的字符串。即結果是['ab','abc']
。這怎麼可以在Python中完成?根據內容過濾字符串列表
>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>
爲什麼這項工作:
鑑於列表['a','ab','abc','bac']
,我想計算一個列表,其中包含'ab'
的字符串。即結果是['ab','abc']
。這怎麼可以在Python中完成?根據內容過濾字符串列表
>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>
爲什麼這項工作:
這種簡單的過濾可以在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']
>>>
-1:Lambda。請不要在n00bs上施加lambda。 – 2010-01-28 11:53:27
@ S.Lott:爲什麼?在適當的環境中學習有用的高級編程主題有什麼問題? – 2010-01-28 12:23:08
@Edi Bendersky:因爲他們比有用的更混亂?因爲它會導致回答「使用def」的問題?因爲它很少會比代碼高爾夫更好嗎?我不知道,經過30多年的各種語言編程之後,它們對我來說似乎毫無用處。但我想他們對你真的很重要。 – 2010-01-28 12:33:19
[x for x in L if 'ab' in x]
你贏了48秒:-) – 2010-01-28 07:20:34
在交互shell快速試過了這一點?因爲in
operator是爲字符串定義的:「是...的子串」。
而且,你可能要考慮寫出來的循環,而不是使用上面所用的list comprehension syntax:
l = ['a', 'ab', 'abc', 'bac']
result = []
for s in l:
if 'ab' in s:
result.append(s)
mylist = ['a', 'ab', 'abc']
assert 'ab' in mylist
# To support matches from the beginning, not any matches:
list = ['a', 'ab', 'abc', 'bac']
prefix = 'ab'
filter(lambda x: x.startswith(prefix), list)
感謝禮Bendersky – 2010-01-28 08:33:41
給出的列表[」 a','b','c','a','b'],我想計算一個帶有'a'和'b'的字符串列表。即結果是['a','b']。這怎麼可以在Python中完成? – 2010-01-28 08:35:32