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

问题描述:

我有一个高度不规则的嵌套列表myList在mma中,每当我给出一个整数序列,如1,1,2,3,1的任何长度,我想知道是否在嵌套列表中如何测试给定的索引序列是否在数学中有效

myList[[1,1,2,3,1]] 

是有效的;因为如果它不是,那么我会得到一个错误说

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

谢谢。

+2

虽然这是一个非常合理的问题,但您仍然可能需要重新考虑函数的设计。如果您需要特定检查来确定某些部分存在,这可能意味着问题或者至少您目前的表达方式不能很好地适用于基于索引的方法。可能是,基于规则或其他方法可以完全消除这个问题。 – 2011-01-27 21:56:53

Quiet[ 
     Check[mylist[[1, 1, 2, 3, 1]], Print[False], Part::partd], 
    Part::partd]; 

可以更换打印[虚假]任何其他行动...

编辑

要同时检查partdpartw消息语法是:

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

HTH!

+0

@belisarius:这仍然不能解决我一般提出的问题。请参阅以下简单示例:`安静[检查[{{{1,3}},{2}} [[1,1,2,3,1]],打印[False], Part :: partd], Part :: partd];` – 2011-01-27 20:13:48

巧合的是,这在数周前就已经出现在MathGroup上了。以下是我认为是最后和最佳回应的网址(来自Ray Koopman)。

http://forums.wolfram.com/mathgroup/archive/2011/Jan/msg00326.html

它也有链接到同一个线程较早的帖子。

丹尼尔Lichtblau

沃尔夫勒姆研究

这里是做的另一种方式。

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的答案虽然会给更多的低级别控制。