Python: узнайте, имеет ли элемент в списке определенную строку

#python

#python

Вопрос:

Я ищу определенную строку в списке; эта строка является частью более длинной строки.

В основном я перебираю текстовый файл и добавляю каждую строку в другой элемент списка. Теперь моя цель — просмотреть весь список, чтобы выяснить, содержит ли какой-либо из элементов string определенную строку.

пример исходного файла:

 asfasdasdasd
asdasdasdasdasd mystring asdasdasdasd
asdasdasdasdasdasdadasdasdasdas
  

Теперь представьте, что каждая из 3 строк находится в элементе списка; и вы хотите знать, есть ли в списке строка «моя строка» в любом из его элементов (мне не нужно знать, где она находится или сколько вхождений строки в списке). Я попытался получить его с помощью этого, но, похоже, он не нашел ни одного вхождения

 work_list=["asfasdasdasd", "asdasdasdasd my string asdasdasdasd", "asdadadasdasdasdas"]
has_string=False

for item in work_list:
    if "mystring" in work_list:
        has_string=True
        print "***Has string TRUE*****"

print " n".join(work_list)
  

Результатом будет просто список, а bool has_string остается False

Я что-то упускаю или неправильно использую оператор in ?

Комментарии:

1. условие должно быть, если «mystring» в item

Ответ №1:

Вы хотите, чтобы это было:

 if "mystring" in item:
  

Ответ №2:

Краткий (и обычно более быстрый) способ сделать это:

 if any("my string" in item for item in work_list):
    has_string = True
    print "found mystring"
  

Но на самом деле то, что вы сделали, это реализовать grep .

Ответ №3:

Способ 1

 [s for s in stringList if ("my string" in s)]
#     --> ["blah my string blah", "my string", ...]
  

Это даст список всех строк, содержащих «мою строку».

Способ 2

Если вы просто хотите проверить, существует ли он где-нибудь, вы можете быть быстрее, выполнив:

 any(("my string" in s) for s in stringList)
#     --> True|False
  

Это позволяет завершить поиск при первом появлении "my string" .

Метод 3

Вы захотите поместить это в функцию, предпочтительно в отложенный генератор:

 def search(stringList, query):
    for s in stringList:
        if query in s:
            yield s

list( search(["an apple", "a banana", "a cat"], "a ") )
#     --> ["a banana", "a cat"]