Python-if语句求值模式
if语句到底在做什么Python-if语句求值模式,python,Python,if语句到底在做什么 >>> list = ['a', 'b', 'c', 'd', 'e', 'f'] >>> for i in xrange(len(list)): ... if i / 2: ... del(list[0]) 这将导致['e','f'] 我不知道if正在做什么。if语句正在删除列表中索引大于或等于2的元素 如果i/2:在i/2不是0时将计算为true。i、 e.index>=2。Python将i/2解释为布尔表达式:如果它等
>>> list = ['a', 'b', 'c', 'd', 'e', 'f']
>>> for i in xrange(len(list)):
... if i / 2:
... del(list[0])
这将导致['e','f']
我不知道if正在做什么。if语句正在删除列表中索引大于或等于2的元素
如果i/2:
在i/2不是0时将计算为true。i、 e.index>=2。Python将i/2
解释为布尔表达式:如果它等于0
,则该表达式被视为false,否则它被视为true。让我们逐行查看代码:
我们用这6个元素创建一个列表
for i in xrange(len(list)):
len(list)
是我们列表的长度,即6和xrange(n)
允许您迭代一个从0
到n-1
的整数(在每个循环中,i
将0
,1
,…,6
)
我们检查i
除以2
的整数除法是真还是假。请记住:0
等同于False
,其他一切等同于True
当i
为0
或1
时,商i/2
为0,因此不执行下一条语句。在其他4种情况下(i
为2
,3
,4
,5
),i/2
大于0
。因此,我们执行该语句
del(lst[0])
这只是要求删除列表的第一个元素,我们已经看到这将被执行4次,因此结果是一个只剩下最后两个元素的列表
该过程可以可视化如下(请记住,
/
是Python中的欧几里得分部):
你基本上是说: 删除列表的第一个元素(
del(列表[0])
),而i
除以2
大于零(i/2
)
因为在前两个循环中不是这样,所以剩下最后两个元素。因为
0/2
和1/2
返回0
,因为它们是整数。如果“i”等于或大于2,则删除列表的第一个元素。0等于false,1或更多等于true。像这样更新代码,以了解每次迭代列表中发生的情况
list = ['a', 'b', 'c', 'd', 'e', 'f']
for i in xrange(len(list)):
print (i)
print list
if (i / 2):
del(list[0])
print list
对于第一次和第二次迭代,当i=0
或i=1
时,如果i/2:语句的计算结果为0
,即False
,因此if
语句下的代码不会执行
对于从i=2
到i=5
的进一步迭代,则语句if i/2:
的计算结果为某个值,即被认为True
,因此执行if
语句下的代码并删除列表的第一个元素
希望这有帮助。如果i/2
那么对范围0,1,2,3,4,5
的0,0,1,1,2,2
,它的计算结果为F,F,T,T,T
。给定4
True
s,它将删除前面的4项。。。因此['e','f']
。虽然合法的代码基本上是没有意义的。你希望实现什么?@AChampion完全正确;还要注意你想做什么;这绝对是错误的方式。如果O(n)也不使用隐藏Python内置项的变量名,例如,list
,则在迭代时修改列表可能会导致违反直觉的结果,并从列表的开头删除项目。欧几里德除法是什么意思?它不同于普通除法吗?它只是除法的名称,包括商和余;)9/4是2,其余的是1,因为9=4*2+1。您可能知道这是整数除法
del(lst[0])
BEGIN OF LOOP
i=0, lst=['a', 'b', 'c', 'd', 'e', 'f']
i/2 = 0/2 = 0 --> False --> Nothing happens
i=1, lst=['a', 'b', 'c', 'd', 'e', 'f']
i/2 = 1/2 = 0 --> False --> Nothing happens
i=2, lst=['a', 'b', 'c', 'd', 'e', 'f']
i/2 = 2/2 = 1 --> True --> Remove first element ('a')
i=3, lst=['b', 'c', 'd', 'e', 'f']
i/2 = 3/2 = 1 --> True --> Remove first element ('b')
i=4, lst=['c', 'd', 'e', 'f']
i/2 = 4/2 = 2 --> True --> Remove first element ('c')
i=5, lst=['d', 'e', 'f']
i/2 = 5/2 = 2 --> True --> Remove first element ('d')
END OF LOOP
lst=['e', 'f']
list = ['a', 'b', 'c', 'd', 'e', 'f']
for i in xrange(len(list)):
print (i)
print list
if (i / 2):
del(list[0])
print list