如何轻松检查字符串是否包含不应包含在其中的字符?

时间:2019-02-14 23:23:49

标签: python

我要检查字符串中是否包含字符

invalid = 'gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'

我正在使用for循环天真地这样做:

for ch in invalid:
    if ch in snippet:
        return False

这可行,但是我想知道是否有更有效或更优雅的方法来做到这一点。

4 个答案:

答案 0 :(得分:2)

这已经非常有效了,您可能需要查看经过优化的re.search,并且可以一次搜索所有字符。

我也建议这样做,这确实非常快,并且只需一遍即可完成:

invalid = set('gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ')
for i in snippet:
    if i in invalid:
        return False

您可以根据需要进行全套设置,但我怀疑由于转换时间会更快一些:

invalid = set('gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ')
if set(snippet) & invalid:
    return False

如果特别是此字符串,则可以进一步优化:

for i in snippet:
    if 'g' <= i <= 'z' or 'G' <= i <= 'Z':
        return False

答案 1 :(得分:0)

用搜索是最有效的方法。

my_set = set(list(invalid))

示例

'o' in my_set

答案 2 :(得分:0)

您可以设置为获取两个字符串中的公共字符,并告诉您两个字符中的哪些公共字符。这样,您可以捕获字符串中所有无效的字符。

设置(摘要)和设置(无效)

答案 3 :(得分:0)

您可以使用类似的设置

invalid = 'gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'

snippet = 'gJ'
# this will return True because characters in "snippet" are also present in "invalid"
bool(set(invalid).intersection(set(snippet)))

snippet = 'a'
# this will return False because characters in "snippet2" are not there in "invalid"
bool(set(invalid).intersection(set(snippet)))