我要检查字符串中是否包含字符
invalid = 'gGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'
我正在使用for循环天真地这样做:
for ch in invalid:
if ch in snippet:
return False
这可行,但是我想知道是否有更有效或更优雅的方法来做到这一点。
答案 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)))