【发布时间】:2011-06-10 00:21:34
【问题描述】:
我只是有几个关于列表和函数操作的问题。
1) 如果我有一个函数f[] 和一个列表list,我想按顺序将f[] 应用于列表的每个元素,就像Scan 一样,但不是Map,@ 987654326@,甚至Nest 都可以。如何做到这一点?
2) 如果我有一个列表list 和一个索引列表ind,如果给定另一个值列表,如何将值分配给相应的元素? Map[list[[#]] &, ind] = value_list 将给出 Set::write: Tag Map in ... is Protected 错误。
3) 如何应用函数f[]ntimes并形成一个结果列表,而不是像函数Nest那样组合函数ntimes?是Map[f[],Range[n]]吗?
编辑
作为对评论的回应,这里有一些简单的示例,所有示例都涉及如何在列表中将具有指定索引的元素设置为零。假设有示例用于说明目的。当然,必须有更好的选择来完成这些任务。在像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]。现在我只想应用setZeroWithRandomIndexn 次,而不是在功能上多次组合它。 NestList 似乎在这里不起作用。
【问题讨论】:
-
我认为每个案例的示例可能有用,至少对于像我这样英语沟通能力为零的人来说。
-
@belisarius:请看我的编辑。谢谢。
-
我认为您是在将值分配给值,而不是符号