删除Mathematica中的嵌套列表

500*_*500 3 wolfram-mathematica

考虑:

Tuples[Range[1, 3], 2]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想基于以下列表删除一些子列表:

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

期望的输出:

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

对应列表的第4,第5和第7个元素.

我试过Drop,Case,Select没有成功,必须遗漏一些东西.

Leo*_*rin 8

鉴于你的清单:

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}}
Run Code Online (Sandbox Code Playgroud)

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

Out[5]= {1, 2, 3, 6, 8}
Run Code Online (Sandbox Code Playgroud)

这有两种方式:

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}}
Run Code Online (Sandbox Code Playgroud)

  • @先生.精灵Temove是从OP复制的,我想我们俩都没有抓到错字. (2认同)
  • @ Mr.Wizard我刚才说明了两种不同的想法:要删除,您可以显式删除,也可以提取剩余的元素.此外,如果原始列表很大并且解压缩,并且要删除的位置列表也很大,则第二种方法可以快一个数量级 - 对于来自解压缩列表的大量删除,"删除"可能非常慢. (2认同)

Sas*_*sha 7

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}}
Run Code Online (Sandbox Code Playgroud)