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

Rob*_*t H 4 wolfram-mathematica

当我输入以下内容时

lis = {1, 2};
pos = Position[lis, 1];
result = Extract[lis, pos]
Run Code Online (Sandbox Code Playgroud)

结果始终是一个列表.

{1}
Run Code Online (Sandbox Code Playgroud)

另一个例子

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

{{1}}
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*mes 6

你可能认识到这一点,但PositionExtract返回列表,因为请求的值可能在超过一个位置被发现.所以一般来说,移除外部支架是没有意义的.

如果您确定结果是单例列表,Flatten则如果元素本身是一个列表,则使用将销毁信息.例如,

Position[{{1}},1]
Run Code Online (Sandbox Code Playgroud)

给出一个列表,其唯一元素是一个列表.所以在这种情况下,使用Extract会更有意义.

即便如此,在很多情况下,Mathematica对x的处理方式与x非常不同,如同

Position[1,1]
Position[{1},1]
Run Code Online (Sandbox Code Playgroud)

结果非常不同.因此,您是否可以从一个成员列表中删除外部大括号取决于您打算如何处理它.