区别:IF IN和IF==python

2024-04-23 13:50:55 发布

您现在位置: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

我知道比较运算符正在匹配字符串,但“in”是否也在这样做?你知道吗

谢谢


Tags: 代码inforif方案条件matrixprint
3条回答

如果要匹配精确的字符串,则使用“==”是精确的。你知道吗

Hiin操作符用于成员身份测试,==操作符用于相等性测试。你知道吗

通常我们在sequence对象中使用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]为真时,y中的x为真。你知道吗

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

字符串

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

使用定义的数据类型:

定义__contains__()方法的用户定义类,当且仅当y.__contains__(x)为真时,y中的x为真。你知道吗

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
>>>
topmember in fixedcol

测试字符串topmember是否包含在fixedcol中。你知道吗

topmember == fixedcol

测试字符串topmember是否等于fixedcol。你知道吗

所以,'a' in 'ab'会计算True。但是'a' == 'ab'会计算False。你知道吗

I wanted to know which condition is better to use.

由于这两个变体执行不同的操作,我们无法回答这个问题。您需要选择执行所需操作的选项。你知道吗

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

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

这是一个品味的问题,你喜欢密集的清单理解一行,或更详细的版本上面。你知道吗

相关问题 更多 >