首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

请大佬们问一个关于 for 循环的问题!

  •  
  •   Ctry · 29 天前 · 1815 次点击
    代码如下:
    def total(nums, target):
    num_copy = tuple(nums)
    print(num_copy)
    index = []
    for i in nums:
    another_num = target-i
    nums.remove(i)
    if another_num in nums:
    ele = (i, another_num)
    for j in ele:
    index.append(num_copy.index(j))
    return index


    print(total([2, 7, 11, 6, 3, 15, 16, 17], 9))


    问题是:循环这个列表:[2, 7, 11, 6, 3, 15, 16, 17]的时候,为什么没有所有元素都循环到? debug 模式显示只循环了[2, 11, 3, 16]这几个元素。而[7,6,15,17]这几个元素并没有循环。这是为什么?求知道的大神告知,感谢感谢!
    11 回复  |  直到 2019-08-21 23:56:31 +08:00
        1
    Trim21   29 天前 via Android
    因为你在循环里把元素给删掉了
    在循环前复制一份列表就好了
    for i in nums[:]:
        2
    ipwx   29 天前 via Android
    for in 循环内部改变循环对象,在有些语言里面你连编译都过不去
        3
    limyel   29 天前
    而且建议代码贴在 ubuntu paste 上面看起来会比较方便一些
        4
    Ctry   29 天前
    @Trim21 多谢多谢,有点理解了。我删除了第一个元素,等到第二次循环的时候,程序把新列表的第一个元素(也就是旧列表的第二个元素)当作了刚才已经循环过的第一个元素,然后就跳过了。直接循环旧列表的第三个元素。这样的话就一直是间隔一个来循环了。
        5
    Ctry   29 天前
    @ipwx 好吧 肯定有更好的实现方法。我再研究一下。
        6
    Ctry   29 天前
    @limyel 好的 感谢提醒。我也感觉这样看起来贼难受。哈哈
        7
    guiqiqi   29 天前 via iPhone   ♥ 1
    @Ctry 无耻安利一波,之前才入门的时候也遇到过这个问题,还做了比较详细的探究,希望对你有帮助: https://init.blog/archives/1350
        8
    ipwx   29 天前 via Android
    @Ctry 你这操作适合写 while i<len(nums),自己管理 i 是否要步进 1。这也是需要修改被遍历对象时的标准做法
        9
    Yggdroot   29 天前
    v2ex 不是支持 markdown 吗,代码贴成这样?
        10
    no1xsyzy   29 天前
    把这段用函数式写就不大可能写错
        11
    Ctry   26 天前 via iPhone
    @guiqiqi 感谢感谢!!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2411 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 14:51 · PVG 22:51 · LAX 07:51 · JFK 10:51
    ♥ Do have faith in what you're doing.