带有“ for”循环和“ if”语句的Python“ in”运算符

时间:2019-01-10 08:14:13

标签: python if-statement for-in-loop

我正在使用 for 循环和 if 语句的运算符中的python 。我的问题是 in 的实现方式,在这两种情况下它的行为有所不同:在使用 for 循环时进行迭代,并在与一起使用时检查是否存在某些元素如果声明?这是否取决于 for if 的实现?

    for i in x:
        #iterates

    if i in x:
        #checks weather i in x or not 

5 个答案:

答案 0 :(得分:0)

in关键字通常是一个运算符:

print(2 in [1, 2, 3])  # True
if 3 in range(7, 20):
   print('3 in range!')

它对应于object.__contains__特殊方法。表达式a in b对应于type(b).__contains__(a)。请注意,ab都是要查找的名称。

for语句中,in不是操作符。它是for .. in ..语法的一部分,将循环变量 name 与可迭代变量分开。

for thing in range(20):
    print(thing)  # thing is something else on each step

请注意,只有for a in bb是要查找的名称。 a是要绑定的名称,类似于赋值语句。


Python语法具有几种构造,其中Lead关键字定义了后续关键字的含义。例如,as关键字在importwith中具有不同的含义:

# as aliases ExitStack
from contextlib import ExitStack as ContextStack

# as holds the result of ContextStack().__enter__()
with ContextStack() as stack:
    ...

考虑此类关键字不是通过实现而是通过含义。例如,a in b始终表示“ a包含在b中”。

答案 1 :(得分:0)

原因是for...inin有所不同。

for x in y遍历y

if x in y呼叫y.__contains__(x)

答案 2 :(得分:0)

python中的关键字“ in”基于“ for”和“ if”解决了不同的目的。请查看this related link in stack overflow以获取更多信息

答案 3 :(得分:0)

使用in进行成员资格测试是通过方法__contains__(请参阅Documentation)进行的。不同的行为来自您之前的关键字forif

使用for进行迭代的方式是,只要关键字next之后的条件为true,就调用方法for并将其返回值写入迭代变量。 。一般来说,成员资格测试只是一个条件。

代码

A in B

执行

B.__contains__(A)  # returns boolean

代码

for A in B :
    # Body

执行

A = B.next()
if B.__contains__(A) :
    # Body

A = B.next()
if B.__contains__(A) :
    # Body

# ...

A = B.next()
if B.__contains__(A) :
    # B.next() throws "StopIteration" if there is no more element

答案 4 :(得分:0)

在许多语言中,您会发现具有多种用途的关键字。这仅仅是一个例子。考虑语句可能比像操作符那样考虑in关键字更有用。

语句x in y是一个布尔值语句(假设y是适当的集合)True仅当x的值在该集合中时y。它是通过__contains__的{​​{1}}成员函数来实现的。

语句y启动一个循环,其中每次迭代for x in y:的值与集合x的值不同。这是通过在生成的迭代器对象上使用y__iter__的{​​{1}}成员函数来实现的。

还有其他可以显示y关键字的语句,例如列表理解或生成器理解。