【问题标题】:Apply list to arguments in Mathematica将列表应用于 Mathematica 中的参数
【发布时间】:2011-04-21 16:02:36
【问题描述】:

如何将列表中的每个元素应用于函数中的每个参数?有点像Map,除了参数数量可变。

例如,如果我有一个函数action[x1_,x2_,x3_]:=...,并且我有一个列表{1,2,3},我将如何创建一个函数来调用actionaction[1,2,3]

我希望这个函数能够处理我将action 更改为action[x1_,x2] 以及其他任何内容,列表现在为{1,2},并立即使用action[1,2] 调用操作。

【问题讨论】:

    标签: wolfram-mathematica


    【解决方案1】:

    基于“有点像 Map,但参数数量可变。”我想您可能正在寻找 Apply 到 1 级。这是通过以下方式完成的:

    Apply[function, array, {1}]
    

    或简写:

    function @@@ array
    

    这是它的作用:

    array = {{1, 2, 3}, {a, b, c}, {Pi, Sin, Tan}};
    
    action @@@ array
    
     {action[1, 2, 3], action[a, b, c], action[Pi, Sin, Tan]} 

    我上面使用的术语可能会产生误导,并限制了Apply 的力量。应用action 的表达式不必是矩形数组。它甚至不需要是 List: {...} 或者它的元素是列表。下面是一个包含这些可能性的示例:

    args = {1, 2} | f[a, b, c] | {Pi};
    
    action @@@ args
    
     动作[1, 2] |动作[a, b, c] |动作[Pi] 
    • args 不是List 而是一组Alternatives
    • 传递给action 的参数数量不同
    • args 的元素之一有头部f

    注意:

    • action 替换 args 的每个元素的头部,不管它是什么。
    • args 的头部保留在输出中,在本例中为 Alternatives(简称:a | b | c

    【讨论】:

    • 你的解决方案和 Sasha 的有什么区别?我的意思是,我看到你的 @@@ 而他的只有 @@。怎么可能是一样的?
    • @d'o-o'b 它们不一样,但它们用于相同的功能:Applyf @@ {1,2,3} 在“级别 0”({1,2,3} 的顶层)处实际上将 List 替换为 f 提供 f[1,2,3]。相比之下,f @@@ {{1}, {2}, {3}} 给出 {f[1], f[2], f[3]},将列表的每个 元素List 替换为 f,或“级别 1 。”这也可以使用Apply[f, expression, levelspec] 为更深层次的表达式完成,但没有简写(如@@@@@)。有关 levelspec 的详细信息,请参阅Level 上的帮助。
    【解决方案2】:
    Apply[action, {1,2,3}]
    

    这也可以输入为action @@ {1,2,3}

    【讨论】:

      【解决方案3】:

      为什么不直接使用 action[lst_?ListQ]?

      【讨论】:

      • 这是您要回答的问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2021-05-22
      • 1970-01-01
      相关资源
      最近更新 更多