为了账号安全,请及时绑定邮箱和手机立即绑定

返回参数列表时出现奇怪的输出

返回参数列表时出现奇怪的输出

ABOUTYOU 2022-08-02 17:37:56
法典def removeEven(List):    for x in List:        if x % 2 == 0:            List.remove(x)    return Listprint(removeEven([18, 106, -158, -124, 199, -28, -68, -91, 46, -190, 63, -30, 142, -36, -162, -121, 14, -192, -143, -57, -59, -129, -146, -76, -186, -84, 70, 19, -13, -12, -5, 179, -191, -43, 160, -156, 105, 104, 93, -188, -184, -197, -136, -35, 16]))输出[106, -124, 199, -68, -91, -190, 63, 142, -162, -121, -192, -143, -57, -59, -129, -76, -84, 19, -13, -5, 179, -191, -43, -156, 105, 93, -184, -197, -35]法典def removeEven(List):    result = []    for x in List:        if x % 2 != 0:            result.append(x)    return result输出[199, -91, 63, -121, -143, -57, -59, -129, 19, -13, -5, 179, -191, -43, 105, 93, -197, -35]我遇到了这种奇怪的行为。我正在编写一个简单的函数来从列表中删除偶数,但是当我修改作为参数传递的列表并返回它时,我得到了一个奇怪的输出。有谁知道原因是什么?请注意,我不是在寻找这个问题的答案,很容易谷歌,但只是解释为什么当我不创建新列表并返回它时输出不同。
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

Python中的一个使用列表理解的Liner:


[x for x in li if x % 2 != 0]

返回参数列表时出现奇怪的输出


不允许在使用 for 循环循环循环访问元素时从列表中删除元素。执行此操作的最佳方法包括创建一个新列表 - 要么循环访问副本,要么构造一个仅包含所需元素的列表并将其赋回同一变量。


众所周知,列表中的每个项目都位于其自己独特的索引中;按顺序排列,从 0 开始。如果我们删除某个项目,则索引大于我们删除的索引的任何项目现在都已向下移动。


这就是为什么这很重要:


foo = ['a', 'b', 'c', 'd']

for index in range(len(foo)):

    del foo[index]

在这个循环中,我们删除了所有元素,所以我们应该以foo == []结束,对吧?事实并非如此。在我们第一次循环行程中,我们删除索引 0 处的项目,索引 1 处的项目成为索引 0 处的项目。我们下次通过循环时,我们删除索引 1 处的项目,该项以前是索引 2 处的项目。


请参阅此处,详细了解如何在循环访问列表时删除元素。请参阅此处,详细了解如何在反向迭代列表时删除元素。


查看完整回答
反对 回复 2022-08-02
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信