此问题在此处已有答案:
Why do I get an IndexError (or TypeError, or just wrong results) from "ar[i]" inside "for i in ar"?(4个答案)
Accessing the index in 'for' loops(26个答案)
How can I collect the results of a repeated calculation in a list, dictionary etc. (make a copy of a list with each element modified)?(2个答案)
5个月前关闭。
我在让代码对列表中的每个值都正常工作时遇到了问题。
这段代码的目的是创建一个函数,该函数的输入参数为numList
,即一个列表,该函数用0
替换列表中的所有奇数,并返回新的列表。
def onlyEvens(numList):
for onlyEvens in numList:
if onlyEvens % 2 != 0:
numList[onlyEvens] = 0
return numList
print(onlyEvens([ 1, 5, 2, 3, 4 ]))
它输出[1,0,2,3,4],但所需的输出是[0,0,2,0,4]。我哪里出错了?
3条答案
按热度按时间ohtdti5x1#
我们使用
onlyEvens
作为numList
的索引,而不是使用onlyEvens
的实际索引。由于return
的缩进,您也可以立即返回,而不是在遍历整个列表后返回。获取每个onlyEvens
的索引的一个解决方案是使用enumerate
:输出:
有关
enumerate
的更多信息:https://docs.python.org/3/library/functions.html#enumeratezxlwwiss2#
溶液
您可以通过以下方法解决问题:
解释
问题出在第3行代码中:
numList[onlyEvens]
。onlyEvens
是列表中的一个元素,而不是索引。这意味着什么?参见下面的示例。实施例1
代码
输出
实施例2
代码
输出
ujv3wf0j3#
使用
onlyEvens
作为函数名和函数中的变量名是容易混淆和出错的。我建议改变它。还要注意你在循环中返回 *,这样你会在处理完第一个元素后返回。所以把它移到循环之外。我们还可以添加一条
print
语句来帮助调试,假设您的代码如下所示:如果你运行它,你会看到它首先处理
1
,列表中的第一个数字,因为这是奇数,你会看到Found an odd number: 1
,现在看下一行:你用它作为numList
的索引但是1
在那个列表中的索引不是1
,而是0
,所以你最终替换了错误的元素,试着把你的循环修改为:我想你可以从那里解决它。