代码之家  ›  专栏  ›  技术社区  ›  Dawn17

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

  •  1
  • Dawn17  · 技术社区  · 7 年前

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

    invalid = 'gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'

    我很天真地使用for循环:

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

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

    4 回复  |  直到 7 年前
        1
  •  2
  •   Benoît P    7 年前

    这已经相当有效了,你可能想看看 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
    
        2
  •  0
  •   Jacob Fuchs    7 年前

    用搜索集 在里面 听写是最有效的方式。

    my_set = set(list(invalid))
    

    例子

    'o' in my_set
    
        3
  •  0
  •   plasmon360    7 年前

    你可以用这样的套装

    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)))
    
        4
  •  0
  •   ajithkp12    7 年前

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

    set(代码段)&set(无效)