【问题标题】:Three questions regarding list and function operations in MathematicaMathematica 中关于列表和函数操作的三个问题
【发布时间】: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 替换为MapApply 等也不起作用。

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:请看我的编辑。谢谢。
  • 我认为您是在将值分配给值,而不是符号

标签: wolfram-mathematica


【解决方案1】:

ScanDo 会做到这一点。试试Scan[f, list]Do[f@el, {el, list}]

关于2),你应该使用Part。例如list[[{ind}]] = a 将根据需要更改元素。如果a 是与ind 长度相同的向量,则将发生适当的线程。

3) 你应该看看NestList

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多