如何在python生成器表达式中包含多个搜索字符串?

如何在python生成器表达式中包含多个搜索字符串?,python,string,search,generator,Python,String,Search,Generator,我有一个文件列表——前两个文件名相同,但目录路径不同。目录路径中还包括状态代码(例如CA或OK) files = [r'C:\temp\OK\somefile_1234_nw.tif', r'C:\temp\test\CA\somefile_1234_nw.tif', r'C:\temp\OK\somefile_9999_nw.tif'] 我可以使用以下生成器表达式提取具有特定文件名的第一个文件: search_string = 'somefile_1234

我有一个文件列表——前两个文件名相同,但目录路径不同。目录路径中还包括状态代码(例如CA或OK)

files = [r'C:\temp\OK\somefile_1234_nw.tif',
         r'C:\temp\test\CA\somefile_1234_nw.tif',
         r'C:\temp\OK\somefile_9999_nw.tif']
我可以使用以下生成器表达式提取具有特定文件名的第一个文件:

search_string = 'somefile_1234_nw.tif'
print next((s for s in files if search_string in s), None)
如何使用生成器表达式提取包含两个搜索字符串--“CA”和“somefile_1234_nw.tif”中的项的文件?在这种情况下,处理效率很重要,因为我的放大问题有数千项

预期输出为:

'C:\temp\test\CA\somefile_1234_nw.tif'

你是说像这样的事吗

>>> next((s for s in files if all(i in s for i in['somefile_1234_nw.tif', 'CA'])), None)
'C:\\temp\\test\\CA\\somefile_1234_nw.tif'

检查迭代器中的所有元素是否都是
True
,如果是,则返回
True
,否则返回
False

您的意思是这样的吗

>>> next((s for s in files if all(i in s for i in['somefile_1234_nw.tif', 'CA'])), None)
'C:\\temp\\test\\CA\\somefile_1234_nw.tif'

检查迭代器中的所有元素是否都是
True
,如果是,则返回
True
,否则,返回
False

,类似的操作应该可以:

search_strings = ['somefile_1234_nw.tif', 'CA']
print next((s for s in files if all([search_string in s for search_string in search_strings])), None)

像这样的方法应该会奏效:

search_strings = ['somefile_1234_nw.tif', 'CA']
print next((s for s in files if all([search_string in s for search_string in search_strings])), None)

既然你在寻找速度,那么发电机可能不是你要走的路。生成器之所以很棒,有几个原因,比如当您的内存即将耗尽,或者在得到下一个答案之前有额外的处理要做

对于1000件甚至数百万件物品的速度:您将希望使用熊猫系列。(因为机器上的内存中可以容纳1000个项目。)


我很想听听你的数据的时间安排。

既然你在寻找速度,那么发电机可能就不是好办法。生成器之所以很棒,有几个原因,比如当您的内存即将耗尽,或者在得到下一个答案之前有额外的处理要做

对于1000件甚至数百万件物品的速度:您将希望使用熊猫系列。(因为机器上的内存中可以容纳1000个项目。)

我想听听你的数据的时间安排