Python- if语句评估模式

时间:2017-03-30 12:42:11

标签: python

if语句在做什么?

>>> list = ['a', 'b', 'c', 'd', 'e', 'f']
>>> for i in xrange(len(list)):
...   if i / 2:
...     del(list[0])

这将导致['e','f']

我不知道if是在做什么。

5 个答案:

答案 0 :(得分:1)

你基本上说:

  

删除列表的第一个元素(del(list[0]),而 i除以2大于零(i/2

由于在前两个周期中它不正确,所以你留下最后两个元素。因为0/21/2返回0,因为它们是整数。

答案 1 :(得分:0)

Python将i/2解释为布尔表达式:如果它等于0,则表达式被认为是false,否则它被认为是真的。让我们逐行查看代码:

lst = ['a', 'b', 'c', 'd', 'e', 'f']

我们创建一个包含这6个元素的列表

for i in xrange(len(list)):

len(list)是列表的长度,即6,xrange(n)允许您迭代从0n-1的整数(在每个循环中i将是01,...,6

    if i / 2:

我们检查i 2之间的整数除法是真还是假。请注意:0相当于False,其他内容相当于True

i01时,商i/2为0,因此不会执行下一个语句。在其他4个案例中(i2345),i/2大于0 。因此我们执行声明。

        del(lst[0])

这只是要求删除列表的第一个元素,我们已经看到这将完成4次,因此结果是一个列表,其中只剩下最后两个元素。

该过程可视化如下(请记住/是Python中的欧几里德分区):

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']

答案 2 :(得分:0)

如果'i'等于或大于2,则删除列表的第一个元素。 0等于false,1或更多等于true。

答案 3 :(得分:0)

像这样更新您的代码,以了解每次迭代您的列表会发生什么。

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=0i=1进行第1次,第2次迭代,然后语句if i/2:评估为zero,即False因此if语句下的代码确实如此不执行。

对于从i=2i=5的进一步迭代,然后语句if i/2:评估为某些value,即考虑True因此if语句下的代码执行并删除list的第一个元素。

希望这有帮助。

答案 4 :(得分:-1)

if语句在索引大于或等于2时删除列表中的元素。

当i / 2不为0时,

if i/2:将评估为true,即index> = 2.