2016-09-05 1 views
1

У меня есть список строк, в которых мне нужно найти определенную подстроку и вернуть результат только тогда, когда подстрока присутствует в каждой строке, которая находится в списке. Моя первая идея состояла в том, чтобы создать список логических значений, которые соответствуют тому, присутствует ли подстрока в каждой более крупной строке в моем списке, а затем пишут еще один цикл, чтобы проверить, является ли этот список логических значений истинным при каждом индексе. Есть ли у кого-нибудь предложения для более элегантного и эффективного метода?Как отслеживать, есть ли у всех строк в списке определенная строка, присутствующая в них?

Благодарим вас!

+0

Единый список постижение должен сделать это. – Andrew

+0

[all()] (https://docs.python.org/3/library/functions.html#all) должен помочь. – wwii

ответ

2

вы можете использовать all() и in:

l = ["pie", "lie", "die"] 
all(['ie' in x for x in l]) 

выше версия может выполнять unnecessary checks.

all('ie' in x for x in l) 
+1

Ненужное использование listcomp предотвращает короткое замыкание. – DSM

+0

Я отредактировал ответ, теперь я должен искать короткое замыкание :) спасибо. – Tempux

0

Я хотел бы использовать встроенный в all функции наряду с generator expression, чтобы избежать создания одноразового промежуточный списка. Так как код может быть выражен в виде одной строки, я бы также определить его с помощью lambda expression вместо обычного def function():

# define function via lambda 
in_all = lambda strings, specific: all(specific in strng for strng in strings) 
in_all.__doc__ = """ Check whether all strings in list contain specified string. """ 

l1 = ["day", "lay", "may"] 
l2 = ["day", "lay", "may", "not"] 

print(in_all(l1, "ay")) # -> True (all had specific string) 
print(in_all(l2, "ay")) # -> False (at least one didn't have 
         #   the specific string) 
+0

Использование лямбды, а затем сразу же именование, как правило, неудобно в любом случае, но затем вручную, используя документ, чтобы документировать его? Почему бы просто не использовать обычный синтаксис функции? – DSM

+0

Я не против вас использовать lamdas для определения коротких функций, но ваша точка в строке документа действительна. Я просто бросил это без уважительной причины - в основном просто для того, чтобы показать, что объект был функцией - большинство людей, вероятно, никогда не беспокоятся, а самые короткие функции не нужны. – martineau

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