2015-05-27 64 views
2

是否有更简单的方法来执行以下操作?在列表查找中单行匹配部分字符串

filename = 'vudu_hail_20140101.xml' 
acceptable_stems = ['vudu', 'google'] 

process_file = False 
for acceptable_stem in acceptable_stems: 
    if acceptable_stem in filename: 
     process_file = True 

基本上,我正在寻找在茎一个是否在文件名的布尔决定因素。这将如何完成一个班轮?

+1

不应该这样对去代码审查,而不是住在这里的SO? – Zizouz212

+0

@ Zizouz212这里的代码只是作为对问题的解释;这不是代码审查的问题。 –

+0

@AmiTavory *有没有更简单的方法来做到以下几点?*它显然有效... – Zizouz212

回答

2

如何使用any关键字:

any([acceptable_stem in filename for acceptable_stem in acceptable_stems]) 

例子:

>> filename = 'vudu_hail_20140101.xml' 
>> acceptable_stems = ['vudu', 'google'] 
>> any([acceptable_stem in filename for acceptable_stem in acceptable_stems]) 
True 

>> filename = 'vudu_hail_20140101.xml' 
>> acceptable_stems = ['vuduf', 'google'] 
>> any([acceptable_stem in filename for acceptable_stem in acceptable_stems]) 
False 
+1

如果需要,您可以删除方括号 - 无需将生成器转换为“列表”。 – TigerhawkT3

+0

@ TigerhawkT3 - 删除为我生成的括号''<生成器对象 0x7f97bff85410>',而不是布尔值。 –

+0

对于我来说(使用第一个例子)''True'与'any(acceptable_stem in filename for acceptable_stem in acceptable_stems)''有关。 – TigerhawkT3