繁体   English   中英

“in”和“not in”语句如何在python中工作

[英]How does the “in” and “not in” statement work in python

我主要在C学习,花了很多时间了解它的实施情况。 但我最近开始学习python。 所以这里有许多不同于C的怪癖。

'in'语句如何在python中工作?

if x in array:
   #the usage of an in statement produces a boolean
for x in array:
   #the usage of an in statement produces an iterable

另外作为一个附带问题。 'not'可以放在布尔表达式的前面,类似于'!' 在C或它可以放在python中'in'语句的前面。 这怎么可能?

if not x == 5:
   #makes sense because 'x == 5' evaluates to a boolean
if x not in array:
   #the statement 'in array' is not a boolean
   #shouldn't it be 'if not x in array'

这些都有可能吗? 它们的评估方式是否应该保持一致? 现在,我认为这是因为Python是一种解释型语言,解释器可以根据周围的语法做不同的事情。

对解释的解释或链接将非常有用,我一直无法找到解决此问题的任何内容。

你混淆了两个完全不相关的语法。

一个是声明 ,请参阅for语句文档。 in是固定语法的一部分:

for_stmt ::=  “for” target_list “in” expression_list “:” suite
              [“else” “:” suite]

您使用的时刻for开始一条线, in部分是必需的,正如:是必需的。 不要混淆Python的for与C for循环; Python是For Each构造 因此它不会“生成”可迭代的,它需要一个可迭代的输入。

另一种是成员资格测试操作 ,运算符是一种表达式

运营商innot in测试的成员。

它适用于容器(不仅仅是迭代)。

两者都严重依赖于Python的OO性质,这是C无法做到的。 如果要查找其他语言的等价物,请查看C ++,Java或C#中的概念,而不是C语言。

for <expr> in <iterable>获取一个可迭代的对象 ,这个对象可以一个接一个地生成元素。 C ++有一个等价的概念 ,在Java中, 迭代器流中有相似之处。

<expr> [not] in <expr>只要求右手表达式结果支持成员资格测试,但如果没有可用于成员资格测试的显式挂钩,Python将回退到迭代。 notnot in简单地反转的结果in操作。

C ++和Java对此没有标准抽象,不同的容器类型各自实现自己的拼写(在C ++中大多数称之为find ,例如set::findmap::find ,而Java通常选择contains变体,给你Set.contains()Map.containsKey() )。

for x in array:for x in array:基于 c ++ 11中引入的循环范围没有太大差别。 c ++中的语法也非常相似:

int a[] = {0, 1, 2, 3, 4, 5};
for (int n : a) // the initializer may be an array
    std::cout << n << ' ';

该语句if x in a:for x in a:不会有很多工作要做对方,他们只是拥有同一个词in ,但它有不同的含义。

您可以很容易地想象如何在c ++中实现类似于if x in a:的功能 - 例如使用std :: find 另一种方法是迭代容器并将每个元素与x进行比较。 某些类型的容器可能存在特定的重载,以使其当然具有更高的性能,但重要的是它可以实现。

暂无
暂无

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

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