我有以下功能:
-- xs: list to be changed
-- ws: list of indices where the values will change to 0
replaceAtIndices xs ws = [if (fromJust (elemIndex x xs)) `elem` ws then 0 else x | x <- xs]
该功能包含2个列表。 ws是xs中我想要更改为0的值的索引。
出于某种原因,它适用于某些情况,而不适用于其他情况:
*Main> replaceAtIndices [1,2,3,4] [2,3]
[1,2,0,0] - 正确
*Main> replaceAtIndices [1,2,3,4] [2]
[1,2,0,4] - 正确
*Main> replaceAtIndices [1,1,2,1,3] [3]
[1,1,2,1,3] - 应该是[1,1,2,0,3]
任何人都可以解释为什么会这样吗?
提前致谢!
答案 0 :(得分:4)
elemIndex
返回列表中项目的第一个出现的索引,因此在第三种情况下,它始终返回0
索引{{1} }它与1
不匹配,因此不会被替换。
将索引与项目相关联的更好方法是使用3
:
zip