【问题标题】:How to see if a string only contains certain characters, and if they do, return True, else return False: Python如何查看字符串是否仅包含某些字符,如果包含,则返回 True,否则返回 False:Python
【发布时间】:2015-05-02 04:55:16
【问题描述】:

对于 python 3.4.1,你将如何查找某些字符是否在你的字符串中?我试过这样做:

def isItBinary(myString):
    for ele in myString:
        if ele == '1' or if ele == '0':
            return True
        else:
            return False

这段代码的问题是,如果我输入 isItBinary('102'),它将返回 True。当且仅当它包含“1”或“0”时,我只希望它返回 True。

【问题讨论】:

  • 当前代码的问题在于它只检查第一个条件,因为函数以return结尾。
  • 我必须在范围(myString)中使用吗?

标签: python string python-3.x binary


【解决方案1】:

我只会使用all 函数。

def isItBinary(myString):
    return all(x in ('0', '1') for x in myString)

x in ('0', '1') 检查x 中的字符是“0”还是“1”。

【讨论】:

  • 我从不喜欢它,因为它也匹配“01”。在这种情况下,“01”是不可能的,但我喜欢明确表明我只想匹配“0”或“1”。
  • 您能否提供任何会产生与x in '01' 错误结果的输入?
  • 你能解释一下x是什么意思吗?
  • 正如我所说,在这种情况下,'01' 有效。但是如果您想要(例如)来自raw_input 的“y”或“n”,x in 'yn' 也可能匹配字符串“yn”,这不是代码的意图。由于这个问题,我通常更喜欢使用tuple 表单来增加我想要匹配的内容的清晰度。
  • @SethMMorton 非常感谢!
【解决方案2】:

您想将isitBinary 应用于多个字符,因为按照您编写它的方式,它会在检查第一个字符后立即返回。

做你想做的事情的简单方法是:

def binaryChar(myCharacter):
    return myCharacter == '1' or myCharacter == '0'

然后将其应用于字符串中的所有字符,如下所示:

def isItBinary(myString):  
    return all(binaryChar(c) for c in myString)

当然,这些可以简化成更易读的方式:

def isItBinary(myString):
    return all(c in '01' for c in myString)

或通过 lambda 函数:

isItBinary = lambda myString: all(c in '01' for c in myString)

【讨论】:

    【解决方案3】:

    你的程序一遇到第一个字符就返回值,你甚至没有遍历整个字符串。下面的这种方法检查条件是否在任何时候都无效,返回False,否则迭代整个字符串并返回True

    def isItBinary(myString):
        for ele in myString:
            if not ele in ("0","1"):
                return False
        return True
    
    
    print isItBinary("102")
    >>> False
    print isItBinary("101")
    >>> True
    

    【讨论】:

      【解决方案4】:

      使用集:

      def is_it_binary(s):
          return not (set(s) - set("01"))
      

      如果从字符串构造的集合包含任何不在第二个集合中的字符,则减法给出一个非空集合。否则,如果它仅包含第二组中的字符,则会得到一个空集,not 将翻转为 True

      或者只是:

      def is_it_binary(s):
          allowed = set("01")
          return all(c in allowed for c in s)
      

      它具有短路的优点(即,一旦发现无效字符,它就会爆炸)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-15
        相关资源
        最近更新 更多