Python-迭代时修改列表

发布于 2021-02-02 23:22:45

l  = range(100)                         
for i in l:                         
    print i,                         
    print l.pop(0),                  
    print l.pop(0)

上面的python代码使输出与预期的完全不同。我想循环播放项目,以便在循环播放时可以跳过某个项目。

关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    该代码试图在迭代列表时修改列表。我在任何情况下都不会这样做。

    你可以使用slice运算符mylist[::3]跳过列表中的每三个项目。

    mylist = [i for i in range(100)]
    for i in mylist[::3]:
        print(i)
    

    关于我的示例的其他要点与python 3.0中的新语法有关。

    • 我使用列表推导定义mylist,因为它在Python 3.0中有效(请参见下文)
    • print是python 3.0中的函数

    现在,Python 3.0 range()的行为类似于xrange(),但它适用于任意大小的值。后者不再存在。



  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    永远不要更改要循环的容器,因为不会通知容器中的迭代器你所做的更改,并且你已经注意到,这很可能会产生完全不同的循环和/或不正确的循环。在正常情况下,循环访问容器副本会有所帮助,但是在你的情况下,你显然不希望这样做,因为在循环50个循环之后,容器将为空,如果再次尝试弹出,则会得到一个例外。

    但要明确的是,你要达到什么行为(如果有)?也许你可以用while… 表达你的欲望?

    i = 0
    while i < len(some_list):
        print i,                         
        print some_list.pop(0),                  
        print some_list.pop(0)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看