根据内容筛选字符串列表

给定列表 ['a','ab','abc','bac'],我想计算一个包含 'ab'的字符串的列表。也就是说,结果是 ['ab','abc']。如何在 Python 中实现这一点?

216929 次浏览
[x for x in L if 'ab' in x]

在交互式 shell 中快速尝试了以下操作:

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

为什么会这样呢? 因为 in接线员被定义为字符串的意思是: “ is substring of”。

另外,您可能需要考虑写出循环,而不是使用上面使用的 列表内涵句法:

l = ['a', 'ab', 'abc', 'bac']
result = []
for s in l:
if 'ab' in s:
result.append(s)

使用 Python 可以通过多种方式实现这种简单的过滤。最好的方法是使用“列表理解法”,如下所示:

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

另一种方法是使用 filter函数:

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

在 Python 3中,它返回一个 迭代器而不是一个列表,但是您可以对它进行强制转换:

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

不过最好还是用理解的方式。

mylist = ['a', 'ab', 'abc']
assert 'ab' in mylist
# To support matches from the beginning, not any matches:


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


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