Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中检查字符串是否只包含给定集合中的字符_Python_String_Python 2.5 - Fatal编程技术网

如何在python中检查字符串是否只包含给定集合中的字符

如何在python中检查字符串是否只包含给定集合中的字符,python,string,python-2.5,Python,String,Python 2.5,我有一个用户输入的多项式,我只想在字符串1234567890^-+x中只有字符时使用它 在不使用外部软件包的情况下,我如何检查它是否正确?我只想使用内置的Python 2.5函数 我正在编写一个在任何Mac电脑上运行的程序,不需要外部软件包 您可以将有效字符转换为集合,因为集合提供了更快的查找 然后你可以使用这样的函数 valid_chars = set("1234567890^-+x") # Converting to a set if all(char in valid_chars for

我有一个用户输入的多项式,我只想在字符串
1234567890^-+x
中只有字符时使用它

在不使用外部软件包的情况下,我如何检查它是否正确?我只想使用内置的Python 2.5函数

我正在编写一个在任何Mac电脑上运行的程序,不需要外部软件包

  • 您可以将有效字符转换为
    集合
    ,因为集合提供了更快的查找
  • 然后你可以使用这样的函数

    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
    

  • 使用正则表达式:

    import re
    
    if re.match('^[-0-9^+x]*$', text):
        # Valid input
    
    re
    模块随Python 2.5提供,是您最快的选择

    演示:

    重新匹配(“^[-0-9^+x]*$”,“1x2^4-2”) 这里有一些奇怪的;-)方法:

    good = set('1234567890^-+x')
    
    if set(input_string) <= good:
        # it's good
    else:
        # it's bad
    

    将字符串转换为集合,并检查输入集合是否为良好集合的子集,如下所示:

    >>> 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
    >>>
    

    还有另一种方法,现在使用:


    这不是最可读的方式。如果您需要,它应该是最快的功能之一。

    min()
    并不是完成此任务的最佳功能。同意所有功能都是最佳选择。来自其他语言的宿醉。我喜欢集合子集方法:-)想试试吗?@MartijnPieters,一点机会也没有-有很多方法可以做到这一点,我不想花半个小时来组织它们;-)@user2357112,只是因为我永远记不起
    .issuperset()
    到底做了什么,而不去查它:-(但我理解
    @MartijnPieters,当然,但使用方法拼写,我不查就记不清哪个是
    =
    。所以我避开了它们。
    =
    对我来说是显而易见的。@MartijnPieters:
    issuperset
    会……等等,显然它不会短路。我以为它会在不构建集合的情况下进行测试从
    输入_字符串
    ,但当我尝试
    {0}.issuperset(xrange(100000000))
    几秒钟前,它开始以某种方式消耗内存,似乎表明它将输入转换为一个集合。我想这没有性能优势。集合有一个
    issuperset
    方法来实现这一点。@user2357112现在请检查我的答案,我使用的
    issubset
    不是将字符串转换为集合的语法;您想要
    set(“1234567890^-+x”)
    (为什么我先看到另一个东西?@user2357112,这叫做集合理解。不,不是。它是一个集合文本,有1个元素。你可以将
    None
    作为第一个参数传递给
    translate()
    。还有人还要检查Python 2.5吗?哈哈;-)它适用于所有当前的蟒蛇:-)
    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
    
    >>> 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
    >>>
    
    >>> 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