list - 比较 Mathematica 中的两个列表

标签 list variables math wolfram-mathematica

我正在编写一个程序,它给出两个列表,如果一个列表的一部分等于另一个整个列表,则返回列表的另一部分。很难解释,我将代码留在这里

E8[L_, P_] := Module[{},
  final = {};
  For[i = 1, i <= Length[L], i++,
   ok = True;
   For[j = 1, j <= Length[P], j++,
    If[L[[i, j]] != P[[j]], 
     ok = False
     ]
    ];
   If[ok == True, 
    coin = Take[L[[i]], {Length[P] + 1, Length[L[[i]]]}];
    AppendTo[final, coin]
    ]
   ];
  Return[final]
  ]

L = {{a, b, a}, {a, b, b}, {b, b, p}, {a, b, a, a}};
P = {a, b};
E8[L, P]

Out={{a}, {b}, {p}, {a, a}

出于某种原因,程序将 {b,b,p} 评估为 True,而不分配 ok=False。 我需要帮助。谢谢

编辑:我只需要找出为什么 ok 没有在代码的该部分分配 False

If[L[[i, j]] != P[[j]], 
 ok = False
 ]

问题肯定是存在的。我尝试将单词 {a,b} 更改为数字,并且程序运行正常,但是当我尝试比较单词时,它不起作用。我如何将列表与单词进行比较?

最佳答案

您应该使用UnsameQ来测试两个表达式是否不相同。

UnsameQ[L[[i, j]], P[[j]]]

或简写形式

L[[i, j]] =!= P[[j]]

(这可以避免更改正在测试的表达式,如 ToString 那样。)

在更多Mathematica风格中,您的代码可以这样编写:-

e8[listL_, listP_] := Module[{plen = Length[listP]},
  DeleteCases[
   Map[If[SameQ[Take[#, plen], listP], Drop[#, plen]] &, listL],
   Null]]

listL = {{a, b, a}, {a, b, b}, {b, b, p}, {a, b, a, a}};
listP = {a, b};

e8[listL, listP]

{{a}, {b}, {a, a}}

用户定义的变量名通常以小写字母开头,以避免与内置函数和实体冲突,例如INCODE.

关于list - 比较 Mathematica 中的两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409113/

相关文章:

python - 创建一个包含 N 个随机数的列表,其中包含最大值、最小值和总和

javascript - jQuery:为三个函数设置 var(s)

c++ - 整数除法舍入库?

math - 从中心点转换的向量

python - 如何将列表转换为逗号分隔元素的序列?

python - 使范围内的所有值显示在 x 轴上

CSS:通过数据过滤器属性选择元素

javascript - scriptlet 的文本框值

ios - 全局变量不能正常工作

math - 分数的2的补码表示法?