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}}