Wolfram mathematica 在Mathematica中删除嵌套列表

Wolfram mathematica 在Mathematica中删除嵌套列表,wolfram-mathematica,Wolfram Mathematica,考虑: Tuples[Range[1, 3], 2] 我想根据以下列表删除一些子列表: sublistToTemove={1,2,3,6,8} 期望输出: {2,1},{2,2},{3,1} 对应于列表的第四、第五和第七个元素 我尝试过Drop、Case、Select但未成功,肯定缺少某些内容。鉴于您的列表: In[15]:= sublistToTemove = {1, 2, 3, 6, 8}; In[16]:= Delete[Tuples[Range[1, 3], 2], Transpo

考虑:

Tuples[Range[1, 3], 2]

我想根据以下列表删除一些子列表:

sublistToTemove={1,2,3,6,8}

期望输出:

{2,1},{2,2},{3,1}

对应于列表的第四、第五和第七个元素

我尝试过Drop、Case、Select但未成功,肯定缺少某些内容。

鉴于您的列表:

In[15]:= sublistToTemove = {1, 2, 3, 6, 8};

In[16]:= Delete[Tuples[Range[1, 3], 2], Transpose[{sublistToTemove}]]

Out[16]= {{2, 1}, {2, 2}, {3, 1}, {3, 3}}
In[2]:= lst = Tuples[Range[1, 3], 2]

Out[2]= {{1, 1}, {1, 2}, {1, 3}, {2, 1}, {2, 2}, {2, 3}, {3, 1}, {3,2}, {3, 3}}

这里有两种方法:

In[6]:= Delete[lst, List /@ sublistToTemove]

Out[6]= {{2, 1}, {2, 2}, {3, 1}, {3, 3}}

In[7]:= lst[[Complement[Range[Length[lst]], sublistToTemove]]]

Out[7]= {{2, 1}, {2, 2}, {3, 1}, {3, 3}}

莱昂尼德,在什么情况下你会使用第二种方法?还有,“Temove”是什么?我以为这是一个打字错误,但萨沙也用它@Wizard Temove先生是从OP复制的,我想我们都没有注意到打字错误。@Mr.Wizard我只是说明了两种不同的思路:要删除,可以显式删除,也可以提取其余元素。此外,如果原始列表很大且未打包,并且要删除的位置列表也很大,则第二种方法可能会快一个数量级-
delete
对于从未打包列表中删除的大量位置可能会非常慢。
In[6]:= Delete[lst, List /@ sublistToTemove]

Out[6]= {{2, 1}, {2, 2}, {3, 1}, {3, 3}}

In[7]:= lst[[Complement[Range[Length[lst]], sublistToTemove]]]

Out[7]= {{2, 1}, {2, 2}, {3, 1}, {3, 3}}