对Mathematica中列表中每个元素的第二个组件执行操作

Qia*_* Li 4 wolfram-mathematica

我可以使用以下方法为ToString列表中每个元素的第一个组件执行一些操作(在本例中):

{ToString@#[[1]], Rest@#}~Flatten~1 & /@ {{1, 2}, {3, 4, 5}}
Run Code Online (Sandbox Code Playgroud)

但是,我有几个问题:

  • 它显然不起作用{ToString@#[[1]], Rest@#}~Flatten~1 & /@ {{1, 2}, 2, {3, 4, 5}}.如何使它也适用于这种情况?预期的产出是{{"1", 2}, 2, {"3", 4, 5}}.
  • 如何轻松地为第二个(或第三个等)组件执行此操作?即我想要输出{{0}, {1, "2"}, {3, "4", 5}, {6, "7", 9, 10}}
  • 有没有办法使用模式/规则(如 /.{#[[1]]->ToString[#[[1]]]})进行此类操作?因此,无论效率如何,请列出您可能想到的所有解决方案.

非常感谢!

Mr.*_*ard 5

在我写完之前,我没有意识到这与Leonid的核心功能相同.或许这说明这可能比他相当复杂的功能更透明.

lst = {{1, 2}, 2, {3, 4, 5}};

Replace[lst, {a_, b__} :> {ToString@a, b}, 1]
Run Code Online (Sandbox Code Playgroud)
{{"1", 2}, 2, {"3", 4, 5}}

然后可以使用{x:Repeated[_, {4}], a_, b__} :> {x, ToString@a, b}, 1]第五个索引等.