我需要检查字符串是否仅包含预定义的符号列表并执行以下操作:
my_string = 'qwer123asd!@#$%^'
tmp = str.maketrans({'0': None, 'x': None, '#': None, '$': None, 'q': None, 'i': None})
if my_string.translate(tmp) == '':
print("Only predefined symbols!")
有没有更好的方法来实现这一目标?
我需要检查字符串是否仅包含预定义的符号列表并执行以下操作:
my_string = 'qwer123asd!@#$%^'
tmp = str.maketrans({'0': None, 'x': None, '#': None, '$': None, 'q': None, 'i': None})
if my_string.translate(tmp) == '':
print("Only predefined symbols!")
有没有更好的方法来实现这一目标?
my_string = 'qwer123asd!@#$%^'
predef = set('0x#$qi')
if set(my_string).issubset(predef):
print "only predefined symbols"
我经常提倡替代正则表达式,因为我认为它经常被用作寻找问题的解决方案,但在这种情况下,我认为它可能是合适的。
import re
pat = re.compile("^[0x#$qi]*$")
my_string = 'qwer123asd!@#$%^'
if pat.match(my_string):
print("Only predefined symbols!")
只需确保 if"]"
是您的预定义符号之一,它是方括号内的第一个符号。
与 euromino 的 set 方法的快速比较表明,使用您在问题中使用的字符串,这快了 3 倍。的创建pat
和predef
被排除在时间之外,所以这是“重复使用”的场景。如果包含它们,差异会更小,但正则表达式仍然更快。