gpt4 book ai didi

wolfram-mathematica - 将 `GatherBy` 的转换应用到不同的列表

转载 作者:行者123 更新时间:2023-12-04 12:00:12 25 4
gpt4 key购买 nike

我有 listAlistB相同的大小。我在做GatherBylistA ,重新排列该列表。将相同的重排应用于 listB 的优雅方式是什么? ?

例如

listA = {1, 2, 3};
listB = {a, b, c};
listA1 = GatherBy[{1, 2, 3}, OddQ];
listB1应该变成 {{a, c}, {b}}
更新
感谢有趣的想法,我最终做了一些类似于 belisarius 的事情。这让我想起了 Python 的“装饰-排序-取消装饰”模式
decorated = Thread[{listA, listB}];
grouped = GatherBy[decorated, OddQ[First[#]] &];
listB1 = Map[Last, grouped, {2}]

最佳答案

好吧,第一次尝试:

(警告警告......“优雅”是一个完全主观的概念)

gBoth[lslave_, lmaster_, f_] := 
{Part[#, All, All, 1], Part[#, All, All, 2]} &@
GatherBy[Transpose[{lslave, lmaster}], f[#[[2]]] &]

lmaster = {1, 2, 3};
lslave = {a, b, c};

{lslave1, lmaster1} = gBoth[lslave, lmaster, OddQ]

出去
{{{a, c}, {b}}, {{1, 3}, {2}}}  

编辑

请注意,要运行此代码,您必须具有
 Dimensions[lslave][[1;;Length[Dimensions@lmaster]]] == Dimensions@lmaster  

但两个列表更深层次的内部结构可能不同。例如:
lmaster = {{1, 2, 3}, {2, 3, 4}};
lslave = {{{a}, {b}, {c}}, {{a}, {b}, {c}}};

{lslave1, lmaster1} = gBoth[lslave, lmaster, #[[1]] < 3 &]

出去
{{{{{a}, {b}, {c}}, {{a}, {b}, {c}}}}, {{{1, 2, 3}, {2, 3, 4}}}}

哼!

关于wolfram-mathematica - 将 `GatherBy` 的转换应用到不同的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811082/

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