python-字符串相等和ord()比较?

时间:2016-10-22 23:44:56

标签: python string algorithm equality

 s1 = request.args.get('s1', '') 
 s2 = request.args.get('s2', '') 

    if '' not in [s1, s2]:
        if s1 == s2:
          if all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2)):
            msg = "first"
          else:
            msg += "second"
        else:
          msg = "thrid"
      else:
        msg = 'fourth'

我想要这段代码打印“秒”。

我尝试了这些输入 s1 =“。0”和s2 =“0.00”

有人可以简要解释一下“if all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2)):”究竟是什么意思吗?

我理解它与字符串相等以及比较字符串上的ord()并想知道它们是如何不同的。

提前感谢您的帮助。

PS:请原谅缩进。 Python初学者在这里!

2 个答案:

答案 0 :(得分:0)

由于实习是一个实现细节,所以没有100%确定的方法可以将该段代码打印成第二位。

CPython在[-5, 256]范围内实习整数,

所以你需要一个角色,当它被传递给ord时会返回一些> 256。

>>> s1 = "asdሴ"
>>> s2 = "asdሴ"
>>> s1 == s2
True
>>> all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2))
False

all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2))检查每个ord(c1)是否与id具有相同的ord(c2)

来自id documentation

  

返回对象的“标识”。这是一个整数,在该生命周期内保证该对象是唯一且恒定的。具有非重叠生存期的两个对象可能具有相同的id()值。

     
    

CPython实现细节:这是内存中对象的地址。

  

答案 1 :(得分:-1)

简单来说,if all(ord(c1) is ord(c2) for c1, c2 in zip(s1, s2))表示ord(s1[i])的{​​{1}}和ord(s2[i])的所有值,范围从i0(其中) len(s1 or s2)c1如果c2ord(s1[i])的引用“对于这两个列表都相同

检查zip()文件。根据文件:

  

zip()返回元组列表,其中第i个元组包含第i个元组   来自每个参数序列或迭代的元素。归来了   list的长度被截断为最短参数的长度   序列

例如:

ord(s2[i])

现在>>> l1 = [1, 2 ,3] >>> l2 = [7, 8, 9] >>> zip(l1, l2) [(1, 7), (2, 8), (3, 9)] 将根据条件[ord(c1) is ord(c2) for c1, c2 in zip(s1, s2)]返回True/False值的元组列表,其中ord(c1) is ord(c2)c1c2tuple返回的上一个元组列表。

现在是最后一部分。如果上面提到的zip()值列表all()的所有值都为True[ ... ]将返回True/False。如果任何单个项目为True,则False会将值返回为all()