关于Mathematica中的列表和函数运算的三个问题

问题描述

| 我只是对列表和函数操作有几个问题。 1)如果我有一个函数
f[]
和一个列表
list
,我想顺序地将
f[]
应用于列表的每个元素,就像
Scan
一样,而不是
Map
Apply
甚至是
Nest
。这该怎么做? 2)如果我有一个列表
list
和一个索引列表
ind
,如何在给定另一个值列表的情况下将值分配给相应的元素?
Map[list[[#]] &,ind] = value_list
将产生
Set::write: Tag Map in ... is Protected
错误。 3)如何应用函数
f[]
n
次并形成结果列表,而不是像函数
Nest
那样构成函数
n
次?是15英镑吗? 编辑 为了回应评论,这里有一些简单的示例,所有示例都涉及如何将列表中具有指定索引的元素设置为零。应该以示例为例。当然,必须有更好的选择来完成这些任务。我只是累了这些,然后才来上班
setZeroWithIndex[list_,ind_] := Module[{},list[[ind]] = ConstantArray[0,Length[ind]]; 
Return[list]];
1)
setZeroWithIndex[list_,ind_] := Scan[ReplacePart[list,# -> 0] &,ind];
。这是行不通的。将
Scan
替换为
Map
Apply
等也不起作用。 2)
setZeroWithIndex[list_,ind_] := Map[list[[#]] &,ind] = ConstantArray[0,Length[ind]];
mylist = Range[20]; setZeroWithIndex[mylist,{2,4,6}]
。得到了我发布的错误。 3)
setZeroWithRandomIndex[list_] := ReplacePart[list,RandomInteger[{1,Length[list]}] -> 0]
。现在我只想应用
setZeroWithRandomIndex
n
次,而不是功能上多次组合。
NestList
在这里似乎不起作用。     

解决方法

        
Scan
Do
会做到这一点。尝试
Scan[f,list]
Do[f@el,{el,list}]
。 关于2),您应使用
Part
。例如,
list[[{ind}]] = a
将根据需要更改元素。如果
a
是与
ind
相同长度的向量,则将发生适当的线程化。 3)您应该看
NestList
。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...