我有一个用户输入的多项式,如果它只有字符串1234567890^-+x
中的字符,我只想使用它。
如何在不使用外部包的情况下检查是否存在?我只想使用内置的Python 2.5函数。
我正在编写一个可以在任何Mac上运行而无需外部程序包的程序。
答案 0 :(得分:13)
以下是一些奇怪的事情:-)如何做到这一点:
good = set('1234567890^-+x')
if set(input_string) <= good:
# it's good
else:
# it's bad
或
if input_string.strip('1234567890^-+x'):
# it's bad!
else:
# it's good
答案 1 :(得分:10)
使用正则表达式:
import re
if re.match('^[-0-9^+x]*$', text):
# Valid input
re
模块附带Python 2.5,是您最快的选择。
演示:
>>> re.match('^[-0-9^+x]*$', '1x2^4-2')
<_sre.SRE_Match object at 0x10f0b6780>
答案 2 :(得分:4)
set
,因为集合提供更快的查找然后您可以使用all
这样的功能
valid_chars = set("1234567890^-+x") # Converting to a set
if all(char in valid_chars for char in input_string):
# Do stuff if input is valid
我们也可以将输入字符串转换为一个集合,并检查输入字符串中的所有字符是否都在有效列表中。
valid_chars = set("1234567890^-+x") # Converting to a set
if set(input_string).issubset(valid_chars):
# Do stuff if input is valid
答案 3 :(得分:2)
如何将字符串转换为集合并检查input_set is subset of good_set
如下所示:
>>> good_set = set('1234567890^-+x')
>>> input_set1 = set('xajfb123')
>>> input_set2 = set('122-32+x')
>>> input_set1.issubset(good_set)
False
>>> input_set2.issubset(good_set)
True
>>>
答案 4 :(得分:1)
另一种方法,现在使用string.translate()
:
>>> import string
>>> all_chars = string.maketrans('', '')
>>> has_only = lambda s, valid_chars: not s.translate(all_chars, valid_chars)
>>> has_only("abc", "1234567890^-+x.")
False
>>> has_only("x^2", "1234567890^-+x.")
True
这不是最易读的方式。它应该是您需要的最快之一。
答案 5 :(得分:0)
whitelist = '1234567890^-+x'
str = 'x^2+2x+1'
min([ch in whitelist for ch in str])
True
str='x**2 + 1'
min([ch in whitelist for ch in str])
False