gpt4 book ai didi

wolfram-mathematica - 在列表中搜索某些三元组

转载 作者:行者123 更新时间:2023-12-02 08:52:26 25 4
gpt4 key购买 nike

假设我们有一个类型为 {x,y,z} 的元素列表对于 x , yz整数。并且,如果需要 x < y < z .我们还假设该列表至少包含 3 个这样的三元组。

Mathematica 可以轻松解决以下问题吗?检测至少一个 {a,b,.} 类型的三元组, {b,c,.}{a,c,.} ?与计算高效的解决方案相比,我对优雅的 1-liner 更感兴趣。

最佳答案

如果我理解这个问题,你想要检测的三元组不一定是一个接一个,但通常出现在列表的某个地方。这是检测所有此类三元组的一种方法。首先,一些测试列表:

In[71]:= tst = RandomInteger[5,{10,3}]
Out[71]= {{1,1,0},{1,3,5},{3,3,4},{1,2,1},{2,0,3},{2,5,1},{4,2,2},
{4,3,4},{1,4,2},{4,4,3}}

代码如下:

In[73]:= 
Apply[Join,ReplaceList[tst,{___,#1,___,#2,___,#3,___}:>{fst,sec,th}]&@@@
Permutations[{fst:{a_,b_,_},sec:{b_,c_,_},th:{a_,c_,_}}]]

Out[73]= {{{1,4,2},{4,3,4},{1,3,5}},{{1,4,2},{4,2,2},{1,2,1}}}

这也许可以满足您的“单行”要求,但效率不高。如果你只需要一个接一个的三元组,那么,作为@Chris 给出的解决方案的替代方案,你可以这样做

ReplaceList[list, 
{___, seq : PatternSequence[{a_, b_, _}, {b_, c_, _}, {a_,c_, _}], ___} :> {seq}]

关于wolfram-mathematica - 在列表中搜索某些三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7518790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com