我有一个清单:
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456', 'def-111', 'qwe-111']
bad = ['abc', 'def']
Run Code Online (Sandbox Code Playgroud)
并且想要搜索包含字符串'abc'和'def'(以及其他不良内容)的项目.我怎样才能做到这一点?
几乎同样的问题在这里.
daw*_*awg 34
如果您只是想要测试,请将目标列表加入到字符串中并测试每个元素,bad如下所示:
>>> my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456', 'def-111', 'qwe-111']
>>> bad = ['abc', 'def']
>>> [e for e in bad if e in '\n'.join(my_list)]
['abc', 'def']
Run Code Online (Sandbox Code Playgroud)
根据您的问题,您可以通过这种方式将每个元素作为子字符串对照另一个元素:
>>> [i for e in bad for i in my_list if e in i]
['abc-123', 'abc-456', 'def-456', 'def-111']
Run Code Online (Sandbox Code Playgroud)
它很快(与其他方法之一相比):
>>> def f1():
... [item for item in my_list if any(x in item for x in bad)]
...
>>> def f2():
... [i for e in bad for i in my_list if e in i]
...
>>> timeit.Timer(f1).timeit()
5.062238931655884
>>> timeit.Timer(f2).timeit()
1.35371994972229
Run Code Online (Sandbox Code Playgroud)
从您的评论中,您可以获得不匹配的元素:
>>> set(my_list)-{i for e in bad for i in my_list if e in i}
{'ghi-789', 'qwe-111'}
Run Code Online (Sandbox Code Playgroud)
Tis*_*sho 11
In [4]: filter(lambda item: any(x in item for x in bad), my_list)
Out[4]: ['abc-123', 'def-456', 'abc-456', 'def-111']
Run Code Online (Sandbox Code Playgroud)
要么
In [13]: [item for item in my_list if any(x in item for x in bad)]
Out[13]: ['abc-123', 'def-456', 'abc-456', 'def-111']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49627 次 |
| 最近记录: |