Убедитесь, что строка не содержит нескольких значений - PullRequest
6 голосов
/ 01 июля 2011

** Примечание. Я не буду просто тестировать в конце строки - нужно найти конкретные подстроки в любом месте строки

Какой самый быстрый способ проверить, чтобы строка не содержала несколько значений. Мой текущий метод неэффективен и не пифоничен:

if string.find('png') ==-1 and sring.find('jpg') ==-1 and string.find('gif') == -1 and string.find('YouTube') == -1:

Ответы [ 3 ]

14 голосов
/ 01 июля 2011

Попробуйте:

if not any(extension in string for extension in ('jpg', 'png', 'gif')):

, что в основном совпадает с вашим кодом, но написано более элегантно.

6 голосов
/ 01 июля 2011

если вы тестируете только конец строки, помните, что str.endswith может принять кортеж.

>>> "test.png".endswith(('jpg', 'png', 'gif'))
True

в противном случае:

>>> import re
>>> re.compile('jpg|png|gif').search('testpng.txt')
<_sre.SRE_Match object at 0xb74a46e8>
>>> re.compile('jpg|png|gif').search('testpg.txt')
0 голосов
/ 01 июля 2011

Вы также можете сделать что-то подобное, если значения для проверки не должны управляться кортежем / списком.

>>> ('png' or 'jpg' or 'foo') in 'testpng.txt'
True
>>> ('png' or 'jpg' or 'foo') in 'testpg.txt'
False

EDIT Теперь я вижу ошибку своих путей, проверяет только первый.

>>> ('bees' or 'png' or 'jpg' or 'foo') in 'testpng.txt'
False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...