2022年 11月 8日

python中if in是什么意思_在if语句中“ in”的使用和含义?

在if语句中“ in”的使用和含义?

在Zed Shaw的《学习Python的艰难方法》的示例中,其中一个练习显示了以下代码:

next = raw_input(“> “)

if “0” in next or “1” in next:

how_much = int(next)

在这段陈述中,我很难理解in的含义。 我习惯于使用in语句,例如在javascript中,其语法类似于:

var = 5;

if (var > 3) {

//code to be executed

}

这个in/in陈述式(Python)与javascript中的if()相同吗?

找到这个问题的答案很棘手,因为in太短了,无法通过搜索引擎缩小答案范围,而且我不知道其操作的正确名称。

Scherf asked 2020-06-24T09:54:30Z

8个解决方案

112 votes

这取决于in是什么。

如果它是一个字符串(如您的示例所示),则in将检查子字符串。

>>> “in” in “indigo”

True

>>> “in” in “violet”

False

>>> “0” in “10”

True

>>> “1” in “10”

True

如果是另一种可迭代的类型(列表,元组,集合,字典…),则in检查成员资格。

>>> “in” in [“in”, “out”]

True

>>> “in” in [“indigo”, “violet”]

False

在字典中,成员资格被视为“关键之一”:

>>> “in” in {“in”: “out”}

True

>>> “in” in {“out”: “in”}

False

Tim Pietzcker answered 2020-06-24T09:54:52Z

17 votes

使用a in b可以简单地转换为”0″,如果b包含a或不包含a,则应该返回。

但是,您的示例看起来有些怪异,如果用户输入包含”0″或”0″,则会从用户那里获取输入并将其整数值分配给”0″变量。

utdemir answered 2020-06-24T09:55:17Z

9 votes

由于您声称习惯于JavaScript:

Python 1 in d运算符类似于JavaScript 1 in d运算符。

这是一些JavaScript:

var d = {1: 2, 3: 4};

if (1 in d) {

alert(‘true!’);

}

和等效的Python:

d = {1: 2, 3: 4}

if 1 in d:

print(‘true!’)

对于对象/字典,它们几乎相同,都检查1 in d是否是对象/字典的键。 当然,最大的不同是JavaScript的类型是草率的,因此str也是一样。

对于数组/列表,它们有很大的不同。 JS数组是一个对象,其索引是键,因此1 in d将是str。Python列表与dict完全不同,其unicode运算符将检查值,而不是索引,这会更有用。 Python将这种行为扩展到了所有可迭代对象。

使用字符串,它们甚至会有所不同。 JS字符串不是对象,因此您将获得1 in d。但是Python str或unicode将检查另一个操作数是否为子字符串。 (这意味着2936932733433442642627是非法的,因为1不能是任何东西的子串,但’1′ in ‘123’是正确的。)

以对象为对象,在JS中当然没有区别,但是在Python中,对象是类的实例,而不是字典。 因此,在JS中,如果对象具有名为in9840的成员或方法,则1 in d对于一个对象将为true,但是在Python中,这取决于您的类-Python将调用in,然后,如果失败,它将尝试使用 将您的对象视为可发音对象(调用其in9842,如果失败,则尝试使用从0开始的整数对其进行索引)。

另外,请注意,因为JS的in9840实际上是在检查对象的隶属关系,所以会执行通常的JS方法分辨率顺序搜索,而Python的in因为正在检查dict的键,序列的成员等,所以没有这种方法。 事情。 因此,从技术上讲,它可能比2936932733475675619842运算符更接近hasOwnProperty方法。

abarnert answered 2020-06-24T09:56:15Z

1 votes

也许这些例子将有助于说明in的功能。 它基本上翻译为Is this item in this other item?

listOfNums = [ 1, 2, 3, 4, 5, 6, 45, ‘j’ ]

>>> 3 in listOfNums:

>>> True

>>> ‘j’ in listOfNums:

>>> True

>>> 66 in listOfNums:

>>> False

jramirez answered 2020-06-24T09:56:35Z

1 votes

您已经习惯使用JavaScript in,并且我想您知道它是如何工作的。

in是实现迭代的Python方式。 非程序思想家应该更容易采用,但是讽刺的是,有时候这会使程序思想家变得更加困难。

当您说next时,您实际上是在说:

“如果next在y中”,则假定y具有索引。 然后在该if语句中,对照该条件检查y中每个索引处的每个对象。

同样,

next

遍历y中的next,其中y是可索引的一组项目。

以这种方式考虑next的情况(伪代码):

for i in next:

if i == “0” || i == “1”:

how_much = int(next)

它为您处理了next上的迭代。

编码愉快!

jwarner112 answered 2020-06-24T09:57:35Z

1 votes

这可能是一个很晚的答案。在操作员中检查成员资格。 也就是说,它检查其左操作数是否是其右操作数的成员。 在这种情况下,raw_input()返回用户在标准输入处提供的内容的str对象。 因此,if条件检查输入是否包含子字符串“ 0”或“ 1”。 考虑下一行中的类型转换(int()),if条件实际上检查输入是否包含数字0或1。

bp14 answered 2020-06-24T09:57:56Z

0 votes

这里raw_input是string,因此,如果要检查if var>3,则应将其转换为双精度值,即float(next),并按与if float(next)>3相同的方式执行:,但是在大多数情况下

Ananta answered 2020-06-24T09:58:16Z

0 votes

保留字“ in”用于查看可以迭代的对象内部。

list_obj = [‘a’, ‘b’, ‘c’]

tuple_obj = (‘a’, 1, 2.0)

dict_obj = {‘a’: 1, ‘b’: 2.0}

obj_to_find = ‘c’

if obj_to_find in list_obj:

print(‘Object {0} is in {1}’.format(obj_to_find, list_obj))

obj_to_find = 2.0

if obj_to_find in tuple_obj:

print(‘Object {0} is in {1}’.format(obj_to_find, tuple_obj))

obj_to_find = ‘b’

if obj_to_find in dict_obj:

print(‘Object {0} is in {1}’.format(obj_to_find, dict_obj))

输出:

Object c is in [‘a’, ‘b’, ‘c’]

Object 2.0 is in (‘a’, 1, 2.0)

Object b is in {‘a’: 1, ‘b’: 2.0}

然而

cannot_iterate_over = 5.5

obj_to_find = 5.5

if obj_to_find in cannot_iterate_over:

print(‘Object {0} is in {1}’.format(obj_to_find, cannot_iterate_over))

会抛出

Traceback (most recent call last):

File “/home/jgranger/workspace/sandbox/src/csv_file_creator.py”, line 43, in

if obj_to_find in cannot_iterate_over:

TypeError: argument of type ‘float’ is not iterable

在您的情况下,raw_input(“>”)返回可迭代的对象,否则将引发TypeError

jgranger answered 2020-06-24T09:58:53Z