gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:23:00 25 4
gpt4 key购买 nike

代码

def removeEven(List):
for x in List:
if x % 2 == 0:
List.remove(x)
return List


print(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]

我遇到了这种奇怪的行为。我正在编写一个简单的函数来从列表中删除偶数,但是当我修改作为参数传递的列表并返回它时,我得到一个奇怪的输出。有谁知道是什么原因吗?

请注意,我并不是在寻找这个问题的答案,很容易通过谷歌搜索,而只是解释为什么当我不创建新列表并返回它时输出会有所不同。

最佳答案

Python 中的一个 Liner 使用 list comprehension :

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

strange output when returning the argument list

使用 for 循环迭代列表时,不允许从列表中删除元素。做到这一点的最佳方法是创建一个新列表 - 要么迭代副本,要么构造一个仅包含所需元素的列表并将其分配回同一变量。

众所周知,列表中的每个项目都有其自己的唯一索引;它们是按顺序从 0 开始的。如果我们删除一个项目,则索引大于我们已删除的项目的任何项目现在都会下移。

这就是为什么这很重要:

foo = ['a', 'b', 'c', 'd']
for index in range(len(foo)):
del foo[index]

在这个循环中,我们将删除所有元素,所以我们最终应该得到 foo == [],对吧?不是这种情况。在第一次循环中,我们删除索引 0 处的项目,索引 1 处的项目成为索引 0 处的项目。下一次循环时,我们删除索引 1 处的项目,该项目以前是索引 1 处的项目2.

参见this了解有关如何在迭代列表时删除元素的更多信息。请参阅this了解有关如何在反向迭代列表时删除元素的更多信息。

关于python - 返回参数列表时出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60280595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com