我用 Python 编写了一个 for 循环,并在 CS 课程的讨论帖子中提交了该循环。它涉及从列表中提取偶数元素并将它们附加到另一个列表中。我编写了以下代码,我认为应该可以很好地工作。
data = [9,4,5,17,12,14,1,0,3,10,9]
even = []
for item in data:
if (item % 2) == 0:
data.remove(item)
even.append(item)
else:
pass
令我惊讶的是,运行代码后得到了以下结果。
muyiwa@mobadara-pc:~/Documents/projects/DSA-2/Unit2$ python fixed_.code.py
The even elements are: [4, 12, 0, 10]
The odd elements are: [9, 5, 17, 14, 1, 3, 9]
我相信作为偶数的元素“14”不应该再出现在奇数列表中,因为
14 % 2 == 0
的计算结果为True
请帮帮我。
发生这种情况是因为您在循环中删除项目,从而跳过数字 14。
您在云中创建了一个名为 odd 的新列表:
data = [9,4,5,17,12,14,1,0,3,10,9]
even = []
odd = []
for item in data:
if (item % 2) == 0:
even.append(item)
else:
odd.append(item)
print(odd)
print(even)
为什么在迭代列表时不应修改列表:
正如前面的评论所说,您在迭代列表时修改列表。 使用 data.copy() 迭代列表的副本。
以下是您的方法所发生的情况:
当您迭代列表的副本时,您可以评估副本内的值,同时从原始列表中删除您想要的任何内容。你不会破坏你的索引。
data = [9,4,5,17,12,14,1,0,3,10,9]
even = []
for item in data.copy():
if (item % 2) == 0:
data.remove(item)
even.append(item)
else:
pass
print(data) : [9, 5, 17, 1, 3, 9]
print(even) : [4, 12, 14, 0, 10]