Мне нужно найти, есть ли строковая переменная a
в строковой переменной b
.
Какое утверждение следует использовать для такого рода задач?
Мне нужно найти, есть ли строковая переменная a
в строковой переменной b
.
Какое утверждение следует использовать для такого рода задач?
Чтобы найти одну строку в другой, вы можете попробовать 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.
....
Как насчет
if a in b:
print "a is in b"
Если вы также хотите игнорировать капиталы:
if a.lower() in b.lower():
print "a is in b"
if a in b:
# insert code here
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]
)).
Строки обрабатываются как списки символов в Python. Следовательно, будет выполняться, является ли символ a и b является строкой, или если a является типом элемента, а b является списком:
if a in b:
#foo
else:
#bar
(Internally, Python обрабатывает строки и списки по-разному, но вы можете рассматривать их как одно и то же во многих операциях, например, в списках).
>>> a = '1324'
>>> b = '58132458495'
>>> if a in b:
print(True)
>>> True
Кратчайший:
>> print 'v' in 'Elvis'
>> True
>> print 'v' in 'Presley'
>> False