[英]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.