Python 更改我';我正在迭代
我对Python比较陌生,我一辈子都搞不清楚这里发生了什么。当使用Python 更改我';我正在迭代,python,list,python-3.x,Python,List,Python 3.x,我对Python比较陌生,我一辈子都搞不清楚这里发生了什么。当使用for循环遍历列表时,Python会每隔一个数字跳过一次,但仅在列表中的特定数量的元素之后。这是我正在进行的一个更大项目的一部分,但这段代码说明了这一点 代码正常工作到7,在这一点上,它开始跳过每隔一个数字。我知道在迭代过程中不要编辑列表,所以我避免了,但是的甚至没有调用其中的一些。我需要做什么才能让它循环通过每个数字而不是每个数字?为什么要这样做 代码: 输出: [2, 3, 5, 7, 11, 13, 17, 19, 23,
for
循环遍历列表时,Python会每隔一个数字跳过一次,但仅在列表中的特定数量的元素之后。这是我正在进行的一个更大项目的一部分,但这段代码说明了这一点
代码正常工作到7,在这一点上,它开始跳过每隔一个数字。我知道在迭代过程中不要编辑列表,所以我避免了,但是的甚至没有调用其中的一些。我需要做什么才能让它循环通过每个数字而不是每个数字?为什么要这样做
代码:
输出:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 49, 53, 59]
2
3
5
7
11
REMOVED: 11
17
REMOVED: 17
23
REMOVED: 23
31
REMOVED: 31
41
REMOVED: 41
47
REMOVED: 47
53
REMOVED: 53
[2, 3, 5, 7, 13, 19, 29, 37, 43, 49, 59]
l3
和l1
指向同一个列表,如果希望它们是唯一的,请使用l3=l1[:]
l3 = l1
现在,l3
和l1
引用了相同的列表。对其中一个调用remove()
,也会影响另一个。因此,当您在迭代l1
时调用l3.remove(a)
时,l1
(!)中的一项被删除,所有后续元素下移,循环迭代到下一个元素,因此跳过一项
例如,假设我们在下面的列表中循环并删除b
:
-----------------
| a | b | c | d |
-----------------
^ (we're on b)
-----------------
| a | | c | d |
-----------------
^ (remove b)
-------------
| a | c | d |
-------------
^ (shift elements down)
-------------
| a | c | d |
-------------
^ (step)
迭代集合时不会从集合中删除元素<代码>l1
和l3
引用的是同一个列表。也许你的意图是:
l3= list(l1)
这要复印一份。啊,是的,这就是我认为它会做的。谢谢大家!@很高兴我能帮忙。别忘了。顺便说一下,我还添加了一个视觉效果,以帮助您更好地理解跳过现象。@arshsajii是的,我会接受它,只需等待stackoverflow让我。。。。谢谢,我真的很感激!实际上,最好的复制方法是
copy.deepcopy
。但因为这是一个int列表,所以简单的浅拷贝就可以了。即使对于对象列表,deepcopy
在这种情况下也太过了。(我不确定,所以我测试了它;如果你认为列表是引用列表,那么更明显的是,更改for
的iterable是不好的,但是更改一个浅拷贝不应该引起任何问题)。+1个提出得很好的问题,其中包含了给你一个明确答案所需的所有细节(耶!)
l3 = list(l1) # create a new, independent list
l3= list(l1)