【问题标题】:Strange output while modifying a list inside a for loop over the list [duplicate]在列表上的for循环内修改列表时出现奇怪的输出[重复]
【发布时间】:2019-04-02 23:56:20
【问题描述】:
H=[1,2,3,4,5,6,7,8]
for h in H:
    print h
    if h%2==1:
        H.remove(h)
        print H

输出:

1
[2, 3, 4, 5, 6, 7, 8]
3
[2, 4, 5, 6, 7, 8]
5
[2, 4, 6, 7, 8]
7
[2, 4, 6, 8]

所以,我只是在试验在同一个列表上的 for 循环内修改列表的可能性,虽然列表本身的行为就像我想的那样,但我不明白为什么数字 2、4、6、8没有被打印。谁能解释一下?

【问题讨论】:

  • 在您的输出中[2, 4, 6, 8] 打印...我误解了您的问题吗?
  • 修改您正在循环的列表是不好的做法
  • @aws_apprentice 我以前做过,但我通常反过来做,这样索引就不会弄乱了。这有点乱,但肯定是可行的!
  • 这是一个糟糕的论点,仅仅因为你可以在python中做某事并不意味着它是正确推荐 i> 方法
  • 如果您在迭代列表时故意尝试修改列表,最好的办法是在列表索引单调前进时撤消删除元素的效果。因此,当您删除一个元素时,请尝试将索引减 1。当然,这意味着您必须使用 enumerate() 来生成索引以及元素。

标签: python python-2.7 list for-loop


【解决方案1】:

这是因为您在迭代列表时正在修改列表。例如,在您的第一次迭代中,您将删除元素 1,而在您的下一次迭代中,索引是 2。但是在您修改后的列表中,索引位置2 的元素是3,因为您删除了元素1

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 2012-04-13
    • 2022-01-02
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    相关资源
    最近更新 更多