Как узнать, есть ли одна строка в другой строке в Python?

Мне нужно найти, есть ли строковая переменная a в строковой переменной b.

Какое утверждение следует использовать для такого рода задач?

Ответ 1

Чтобы найти одну строку в другой, вы можете попробовать string найти метод.

if b.find(a) != -1:  # -1 will be returned when a is not in b
    do_whatever

Чтобы игнорировать заглавные буквы, вы можете сделать что-то вроде:

if b.lower().find(a.lower()) != -1:
    do_whatever

Дополнительный комментарий: Когда я печатаю это, это происходит через три года с тех пор, как я изначально предоставил этот ответ. Ответ по-прежнему получает случайные голоса, как вверх, так и вниз. Поскольку ответ работает, по-видимому, нисходящие избиратели считают, что это не так, как Pythonic, как ответ if a in b:. Как говорится в комментариях, этот ответ может терпеть неудачу, если a и b не являются строками. Дебаты о том, должно ли это быть предметом озабоченности. Я уже некоторое время видел и видел всевозможные вещи, когда код повторно использовался или входные данные не были ожидаемыми. Таким образом, моя точка зрения заключается в том, что не следует полагать, что данные будут соответствовать ожиданиям. Кроме того, я считаю, что Zen of Python поддерживает точку зрения, что этот ответ более Pythonic:

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
...
Errors should never pass silently.
Unless explicitly silenced.
....

Ответ 2

Как насчет

if a in b:
    print "a is in b"

Если вы также хотите игнорировать капиталы:

if a.lower() in b.lower():
    print "a is in b"

Ответ 3

if a in b:
    # insert code here

Ответ 4

if a in b:
    # ...found it, do stuff...

или

if b.find(a) != -1:
    # ...found it, do stuff...

Первое, вероятно, больше pythonic, но последнее позволяет быстрее ловить проблемы, если a или b не являются типами, которые вы ожидали, поскольку если a или b не являются строками, последний всегда будет терпеть неудачу, (в частности, 'foo' in ['foobar'] или даже 'foo' in [1,2,3])).

Ответ 5

Строки обрабатываются как списки символов в Python. Следовательно, будет выполняться, является ли символ a и b является строкой, или если a является типом элемента, а b является списком:

if a in b:
    #foo
else:
    #bar

(Internally, Python обрабатывает строки и списки по-разному, но вы можете рассматривать их как одно и то же во многих операциях, например, в списках).

Ответ 6

>>> a = '1324'
>>> b = '58132458495'
>>> if a in b:
      print(True)

>>> True

Ответ 7

Кратчайший:

 >> print 'v' in 'Elvis'
 >> True


 >> print 'v' in 'Presley'
 >> False