检查以确保字符串不包含多个值

时间:2011-07-01 01:36:54

标签: python algorithm string

**注意 - 我不会只是在字符串的末尾进行测试 - 需要在字符串中的任何位置找到特定的子字符串

检查以确保字符串不包含多个值的最快方法是什么。我目前的方法是效率低下并且是unpythonic:

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

3 个答案:

答案 0 :(得分:14)

尝试:

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

与您的代码基本相同,但写得更优雅。

答案 1 :(得分:6)

如果您只测试字符串的结尾,请记住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')

答案 2 :(得分:-4)

如果要测试的值不需要由元组/列表管理,您也可以执行类似的操作。

>>> ('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