Python-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解释为布尔表达式:如果它等

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
解释为布尔表达式:如果它等于
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