给定列表 ['a','ab','abc','bac'],我想计算一个包含 'ab'的字符串的列表。也就是说,结果是 ['ab','abc']。如何在 Python 中实现这一点?
['a','ab','abc','bac']
'ab'
['ab','abc']
[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”。
in
另外,您可能需要考虑写出循环,而不是使用上面使用的 列表内涵句法:
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
>>> 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)