繁体   English   中英

之间的区别:IF IN和IF == python

[英]Difference between: IF IN and IF == python

我想知道哪种条件更适合用于以下代码:

这是我的两个清单:

Matrix = ['kys_q1a1','kys_q1a2','kys_q1a3','kys_q1a4','kys_q1a5','kys_q1a6']
fixedlist = ['kys_q1a2', 'kys_q1a5']

选项1:

for i, topmember in enumerate(Matrix):
    for fixedcol in fixedlist:
        if topmember in fixedcol:
            print i

要么

选项2:

for i, topmember in enumerate(Matrix):
    for fixedcol in fixedlist:
        if topmember == fixedcol:
            print i

我了解比较运算符正在匹配字符串,但不是“在”做同样的事情吗?

谢谢

topmember in fixedcol

测试字符串topmember是否包含在 fixedcol

topmember == fixedcol

测试字符串topmember是否等于 fixedcol

因此, 'a' in 'ab'将评估为True 但是'a' == 'ab'将得出False

我想知道哪种条件更好使用。

由于这两种变体执行不同的操作,因此我们无法回答。 您需要选择执行所需操作的选项。

您的代码可以简化很多。 第二种选择可以简化为:

for i, topmember in enumerate(Matrix):
    if topmember in fixedlist:
        print i

您还可以使用列表推导找到匹配的索引:

[i for i, x in enumerate(Matrix) if x in fixedlist]

如果只需要打印索引而不是将它们存储在列表中,则可以这样编写:

print '\n'.join([str(i) for i, x in enumerate(Matrix) if x in fixedlist])

您是否喜欢密集的列表理解单行代码,还是上面更详细的版本,都取决于您的口味。

in opeartor用于会员的测试和==操作符,用于平等测试。

一般来说,我们用in对序列对象的成员测试。 并能够在字典,集合,元组,列表,字符串等中进行测试。但是它的行为根据对象类型而有所不同。

字典

它检查key存在。

>>> d = {'key' : 'value'}
>>> 'key' in d
True
>>> 'k' in d
False
>>>

设置

它在幕后检查密钥是否存在, 集合的实现与带有某些伪值的字典相同。

>>> s = set(range(10))
>>> 1 in s
True
>>>

列表和元组:

对于列表和元组类型,当且仅当存在索引i使得x == y [i]为true时,y中的x才为true。

>>> l = range(10)
>>> 3 in l
True
>>>

字串

检查子字符串是否存在于字符串中,例如 当且仅当x是y的子字符串时,y中的x才是true。 等效测试为y.find(x)!= -1

使用定义的数据类型:

定义__contains__()方法的用户定义类,当且仅当y.__contains__(x)为true时, y.__contains__(x)为true。

class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __contains__(self, arg):
        if arg in self.__dict__.keys():
            return True
        else:
            return False

obj_p = Person('Jeff', 90)

print 'Jeff', 'Jeff' in obj_p
print 'age', 'age' in obj_p
print 'name', 'age' in obj_p

希望您能清除in的用法。

让我们重写您的代码段:

>>> Matrix = ['kys_q1a1','kys_q1a2','kys_q1a3','kys_q1a4','kys_q1a5','kys_q1a6']
>>> fixedlist = ['kys_q1a2', 'kys_q1a5']
>>> for i in fixedlist:
...     print i, i in Matrix
...
kys_q1a2 True
kys_q1a5 True
>>>

最后,让我们看一些相等性测试: ==

>>> 'a' == 'b'
False
>>> 'a' == 'a'
True
>>> 'a' == 'ab'
False
>>> '' in 'ab'    # empty string is treated as a sub-string for any string
True
>>> '' == 'ab'    # False as they are having different values
False
>>>
>>> 1 == 'ab'
False
>>> 1 == 1
True
>>>

如果您想匹配精确的字符串,则使用'=='是精确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM