python-3.x 获取代码以重复/处理列表中的每个值时出现问题[重复]

gab6jxml  于 2023-03-09  发布在  Python
关注(0)|答案(3)|浏览(121)

此问题在此处已有答案

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]。我哪里出错了?

ohtdti5x

ohtdti5x1#

我们使用onlyEvens作为numList的索引,而不是使用onlyEvens的实际索引。由于return的缩进,您也可以立即返回,而不是在遍历整个列表后返回。获取每个onlyEvens的索引的一个解决方案是使用enumerate

def onlyEvens(numList):
    for i, onlyEvens in enumerate(numList):
        if onlyEvens % 2 != 0:
            numList[i] = 0
    return numList 
print(onlyEvens([ 1, 5, 2, 3, 4 ]))

输出:

[0, 0, 2, 0, 4]

有关enumerate的更多信息:https://docs.python.org/3/library/functions.html#enumerate

zxlwwiss

zxlwwiss2#

溶液

您可以通过以下方法解决问题:

def onlyEvens(numList):
    for i in range(len(numList)):
        if onlyEvens % 2 != 0:
            numList[i] = 0
    return numList

解释

问题出在第3行代码中:numList[onlyEvens]onlyEvens是列表中的一个元素,而不是索引。这意味着什么?参见下面的示例。

实施例1

代码

list = ['a', 'b', 'c']
for letter in list:
   print(letter)

输出

'a'
'b'
'c'

实施例2

代码

list = ['a', 'b', 'c']
for i in range(len(list)):   # Repeat it as many times as the length of list.
   print(i)

输出

0
1
2
ujv3wf0j

ujv3wf0j3#

使用onlyEvens作为函数名和函数中的变量名是容易混淆和出错的。我建议改变它。还要注意你在循环中返回 *,这样你会在处理完第一个元素后返回。所以把它移到循环之外。
我们还可以添加一条print语句来帮助调试,假设您的代码如下所示:

def onlyEvens(numList):
    for num in numList:
        if num % 2 != 0:
            print('Found a odd number:', num)
            numList[num] = 0
    return numList

如果你运行它,你会看到它首先处理1,列表中的第一个数字,因为这是奇数,你会看到Found an odd number: 1,现在看下一行:你用它作为numList的索引但是1在那个列表中的索引不是1,而是0,所以你最终替换了错误的元素,试着把你的循环修改为:

for i, num in enumerate(numList):

我想你可以从那里解决它。

相关问题