zoukankan      html  css  js  c++  java
  • for 循环时候 pop现象

    a = ['a','b','c','d',1, 2, 3, 4,5,6,7,8]
    for index, x in enumerate(a):
        print("索引是{},列表的长度是{},删除的值是{}".format(index, len(a),a[-1]))
        a.pop()
        print(a)
    
        print("=" * 20)
    
    print('~~~~~')
    
    a2 = ['a','b','c','d',1, 2, 3, 4,5,6,7,8]
    for i in a2:
        a2.pop()
        print(a2)

    `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

    /usr/local/bin/python3.7 /code/pop2.py
    索引是0,列表的长度是12,删除的值是8
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5, 6, 7]
    ====================
    索引是1,列表的长度是11,删除的值是7
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5, 6]
    ====================
    索引是2,列表的长度是10,删除的值是6
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5]
    ====================
    索引是3,列表的长度是9,删除的值是5
    ['a', 'b', 'c', 'd', 1, 2, 3, 4]
    ====================
    索引是4,列表的长度是8,删除的值是4
    ['a', 'b', 'c', 'd', 1, 2, 3]
    ====================
    索引是5,列表的长度是7,删除的值是3
    ['a', 'b', 'c', 'd', 1, 2]
    ====================
    ~~~~~
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5, 6, 7]
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5, 6]
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5]
    ['a', 'b', 'c', 'd', 1, 2, 3, 4]
    ['a', 'b', 'c', 'd', 1, 2, 3]
    ['a', 'b', 'c', 'd', 1, 2]

    Process finished with exit code 0

    分析下为什么,pop 最后的结果不是     []          ,而是到['a', 'b', 'c', 'd', 1, 2] 就停止了.

    可以看一下第一段代码. 每次迭代的时候,索引值都是在累加.  当索引是5的时候, pop已经删到['a', 'b', 'c', 'd', 1, 2] 还剩6个.,这6个值的下标是 0,1,2,3,4,5

    假设 索引是6 , 那么list里面的值就需要7个.  但是 结果并没有7个值在里面. 所以就暂停了. 

    所以,如果继续累加索引的话, 索引是6,值['a', 'b', 'c', 'd', 1,]    这些值的索引是  0,1,2,3,4   但是这又只有5个值,索引只到4,     所以不存在索引6, 就只有暂停了.

    ================= 同理===================

    a = [1, 2, 3, 4]
    for index, x in enumerate(a):
        print("索引是{},去删除的值是{},列表的长度是{}".format(index, x, len(a)))
        a.remove(x)
        print("=" * 20)
    print(a)
     

    结果如下:

    索引是0,去删除的值是1,列表的长度是4
    ====================
    索引是1,去删除的值是3,列表的长度是3
    ====================
    [2, 4]

    如果索引是2 , 但是 这个上面的[2,4] ,索引只到1,是 0,1 .也不存在索引2,所以,只剩下2和4的结果. 

    注意:

    列表的长度在变化,索引值也在变化。这个是容易忽视的一个点,原因是for循环的对象是一个可迭代的对象。

    所以,如果以上列表,循环到[] .可以用下面的方法解决.

    a2 = ['a','b','c','d',1,2,3,4,5,6,7,8]
    
    print(len(a2))
    
    for i in range(len(a2)):
        # del a2[0]    这个方法也可以,下面的pop也可以 
        a2.pop()
        print(a2)

    /usr/local/bin/python3.7 /code/pop2.py
    12
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5, 6, 7]
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5, 6]
    ['a', 'b', 'c', 'd', 1, 2, 3, 4, 5]
    ['a', 'b', 'c', 'd', 1, 2, 3, 4]
    ['a', 'b', 'c', 'd', 1, 2, 3]
    ['a', 'b', 'c', 'd', 1, 2]
    ['a', 'b', 'c', 'd', 1]
    ['a', 'b', 'c', 'd']
    ['a', 'b', 'c']
    ['a', 'b']
    ['a']
    []

    Process finished with exit code 0

  • 相关阅读:
    idea 控制到不能输出中文
    后台学习
    carthage和cocoapods
    如何优雅地调试
    从一次内存峰值说起
    多线程单线程,同步异步,并发并行,串行队列并行队列,看这里就对了
    iOS网络层设计感想
    iOS团队风格的统一
    AFNetworking二次封装的那些事
    UITextFiled,UITextView长度限制
  • 原文地址:https://www.cnblogs.com/666sss/p/11620024.html
Copyright © 2011-2022 走看看