Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改我';我正在迭代_Python_List_Python 3.x - Fatal编程技术网

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,

我对Python比较陌生,我一辈子都搞不清楚这里发生了什么。当使用
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)