将模应用于python列表的所有元素,并获得一些正确的或不正确的元素

将模应用于python列表的所有元素,并获得一些正确的或不正确的元素,python,list,loops,Python,List,Loops,我正在实现一个函数,它将列表的所有元素都减少到模3。以下是我所拥有的: def reduceMod3(l): for i in l: l[i] = l[i] % 3 return l 当我在L=[1,2,3,4,5,6,7,8,9]上调用这个函数时,我得到: L = [1, 2, 0, 4, 2, 6, 1, 8, 0] 为什么会这样?我正在努力想办法,但我赶时间。谢谢。您的列表分配已关闭,l[i]不是说“等于i的值”,而是说“在列表l中定位i”。您也不希望在

我正在实现一个函数,它将列表的所有元素都减少到模3。以下是我所拥有的:

def reduceMod3(l):
    for i in l:
        l[i] = l[i] % 3
    return l
当我在L=[1,2,3,4,5,6,7,8,9]上调用这个函数时,我得到:

L = [1, 2, 0, 4, 2, 6, 1, 8, 0]

为什么会这样?我正在努力想办法,但我赶时间。谢谢。

您的列表分配已关闭,
l[i]
不是说“等于
i
的值”,而是说“在列表
l
中定位
i
”。您也不希望在迭代列表时对其进行修改

我想这是你想要的。创建传入列表中mod3项的新列表

def reduceMod3(l):
    return [i % 3 for i in l]

在l中为i编写
时,您访问的是列表中的每个元素,而不是索引。相反,你应该写作

for i in range(len(l)):
您还可以通过列表理解来解决此问题:

return [item % 3 for item in l]

中称它为
i
[…对于l中的i]
,这很奇怪,因为
i
通常(实际上在这里用作)一个索引变量。我想这是个人偏好的问题。我通常使用像I,j,x,y这样的名称来索引列表理解。对,但它不是索引。你知道这有多让人困惑吧P YMMV,这并没有错,但它只是让人困惑,尤其是作为对一个问题的回答,因为元素和索引之间存在混淆。公平地说,我将更改它以澄清在迭代列表时修改它实际上没有害处,只要您不从列表中追加或删除。@AdamSmith您是正确的。由于他错误地将
l[I]
设置为
I
中的项目,我认为可能会出现问题,但如果发生这种情况,则会导致索引器出现问题。