gpt4 book ai didi

wolfram-mathematica - 为什么 Extract 会在结果中添加额外的 {} 以及删除它们的最佳方法

转载 作者:行者123 更新时间:2023-12-04 08:06:00 24 4
gpt4 key购买 nike

当我输入以下内容时

lis = {1, 2};
pos = Position[lis, 1];
result = Extract[lis, pos]

结果总是一个列表。
{1}

另一个例子
lis = {{1}, {2}};
pos = Position[lis, {1}];
result = Extract[lis, pos]

{{1}}

Mathematica 总是在结果中添加一个额外的 {}。除了每次应用 Flatten[result,1] 之外,删除这个额外的 {} 的最佳方法是什么?是否存在移除这些额外 {} 会导致问题的情况?

最佳答案

如果我正确理解你的问题,你是在问为什么

lis = {{1}, {2}};
pos = Position[lis, {1}];
result = Extract[lis, pos]

返回
{{1}}

而不是
{1}

我认为答案很简单: Position[lis,{1}] 给出了 {1} 出现的位置,而不是 1 出现在 lis 中;当你使用 Extract 去查看那个位置时,你确实得到了 {1} ,然后它被包裹在一个列表中(这正是在第一种情况下发生的,当你寻找 1 并获得 {1} 结果时;只需替换 1通过 {1} ,因为这就是您现在所要求的。

要更清楚地看到这一点,请尝试
lis = {f[1], f[2]};
pos = Position[lis, f[1]];
result = Extract[lis, pos]

这使
{f[1]}

这里的重点是 List 中的 {1} (如果你查看 List[1] ,它与 FullForm 相同)之前只是一个头,就像这里的 f 。 mathematica 应该在这里删除 f 吗?如果没有,那为什么要早点删除最里面的 List 呢?

最后,如果您真的想删除第二个示例中的内部 {},请尝试
lis = {{1}, {2, {1}}};
pos = Position[lis, {1}];
result = Extract[lis, pos, #[[1]] &]

给予
{1, 1}

编辑:我对这里的一些答案感到困惑。如果我做
lis = {{1}, {2, {1, 2, {1}}}};
pos = Position[lis, 1];
result = Extract[lis, pos]

然后我得到
{1, 1, 1}

result 中。当我实际获得 {1}pos 中的位置而不是 1 的位置时,我才得到额外的括号(然后当我查看这些位置时,我找到了 {1} )。或者我在你的问题中遗漏了什么?

关于wolfram-mathematica - 为什么 Extract 会在结果中添加额外的 {} 以及删除它们的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6760688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com