关于python:基于内容过滤字符串列表

Filtering a list of strings based on contents

考虑到EDOCX1[0]列表,我想计算一个包含EDOCX1[1]的字符串的列表。即结果为['ab','abc']。如何在python中实现这一点?


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

1
2
3
4
5
>>> lst = ['a', 'ab', 'abc', 'bac']
>>> res = [k for k in lst if 'ab' in k]
>>> res
['ab', 'abc']
>>>

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

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


1
[x for x in L if 'ab' in x]


1
2
3
4
5
6
# To support matches from the beginning, not any matches:

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

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


在交互式shell中快速尝试了此方法:

1
2
3
4
>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>

为什么会这样?因为in运算符是为表示"is substring of"的字符串定义的。

此外,您可能会考虑编写循环,而不是使用上面使用的列表理解语法:

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

1
2
mylist = ['a', 'ab', 'abc']
assert 'ab' in mylist