Wolfram mathematica 在嵌套列表中,如何测试给定的索引序列在mathematica中是否有效

Wolfram mathematica 在嵌套列表中,如何测试给定的索引序列在mathematica中是否有效,wolfram-mathematica,Wolfram Mathematica,在mma中,我有一个高度不规则的嵌套列表myList,每当给我一个整数序列,比如任意长度的1,1,2,3,1,我都想知道 myList[[1,1,2,3,1]] 是有效的;因为如果不是,那么我会得到一个错误 Part::partw: part... does not exist 谢谢 Quiet[ Check[mylist[[1, 1, 2, 3, 1]], Print[False], Part::partd], Part::partd]; 您可以将Prin

在mma中,我有一个高度不规则的嵌套列表
myList
,每当给我一个整数序列,比如任意长度的
1,1,2,3,1
,我都想知道

myList[[1,1,2,3,1]]
是有效的;因为如果不是,那么我会得到一个错误

Part::partw: part... does not exist
谢谢

   Quiet[
       Check[mylist[[1, 1, 2, 3, 1]], Print[False], Part::partd], 
   Part::partd];  
您可以将Print[False]替换为任何其他操作

编辑

要检查partdpartw消息,语法如下:

Quiet[Check[{{{1, 3}}, {2}}[[1, 4, 2, 3, 1]], 
    Print[False], {Part::partd, Part::partw}], 
   {Part::partd, Part::partw}];

巧合的是,这是几周前在MathGroup上出现的。下面是一个我认为是最后也是最好的回复(来自Ray Koopman)的URL

它也有链接到同一线程中的早期帖子

丹尼尔·利奇布劳


Wolfram Research

这里是另一种方法

Quiet[MemberQ[#, #[[1, 4, 2, 3, 1]], Infinity] &[{{{1, 3}}, {2}}]]
返回False

在检查该位置的元素(如果存在)是否在列表中后,它将返回true或false

Quiet[MemberQ[#, #[[1, 1, 2]], Infinity] &[{{{1, 3}}, {2}}]]
返回True


belisarius的回答将提供更多的低级别控制。

@belisarius:这仍然不能解决我提出的一般问题。请参阅以下简单示例:
Quiet[Check[{{{1,3},{2}}[[1,1,2,3,1]],Print[False],Part::partd],Part::partd]@强请重新检查。它在我的机器上运行正常。它打印错误,作为一个错误indication@bekusarius发生了什么事?如果复制/粘贴并运行它,则其行为是正确的。但是,如果我只是重新运行我最初拥有的,我会得到,{1,3}的第4部分不存在。我看了一遍又一遍,发现表情都一样。为什么?这里没有以前定义的变量…@Qiang它在我的机器上连续正常运行了好几次。我用的是Mma 8。也许是版本冲突?还有人想看看这个吗?@belisarius:对不起,我表达错了。你能试试这个吗:
Quiet[Check[{{{1,3},{2}[[1,4,2,3,1]],Print[False],Part::partd],Part::partd]虽然这是一个非常合理的问题,但您可能仍然需要重新考虑函数的设计。如果您需要对某些部分的存在进行特殊检查,这可能意味着问题,或者至少是您当前对它的表述,不适合基于索引的方法。也许,基于规则或其他方法可以完全消除这个问题。