2015-05-27 3 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

Результат для «Истинный» для меня (с использованием первого примера) с 'any (допустимый_stem в имени файла для допустимого_stem в допустимых_stems)'. – TigerhawkT3

Смежные вопросы