Come estrarre gli elementi di un elenco da un altro elenco con corrispondenze parziali agli elementi di un terzo elenco?Ho i seguenti elenchi
bigList = {"CD_CORN_1", "ICS_CORN_6", "IPEK21_S00R_P37_2", "CURR_S009_P37_2", "CD_CORN_2", "Ig_RF", "Cmax03_4C230RF", "NG"};
smallList1 = {"CD_CORN_", "CD_CORN_", "CD_CORN_"}; //note these are repeats and that is how I get them
smallList2 = {"IDS_CORN_", "IPEK21_S00R_", "CURR_S009_"};
smallList3 = {"RF", "IPEK21_S00R_", "CURR_S009_", "NG"};utilizzando biglist E piccola lista1 , Voglio ottenere
sbigList1 = {"CD_CORN_1", "CD_CORN_2"};
utilizzando biglist E piccola lista2 , Voglio ottenere
sbigList2 = {"ICS_CORN_6", "IPEK21_S00R_P37_2", "CURR_S009_P37_2"};utilizzando biglist E piccola lista3 , Voglio ottenere
sbigList3 = {"IPEK21_S00R_P37_2", "CURR_S009_P37_2", "Ig_RF", "Cmax03_4C230RF", "NG"};Come farlo tramite JSL?
(l'ordine degli elementi nella lista sbig non ha importanza)
Automazione e scriptingfinestreRi: Come estrarre gli elementi di un elenco da un altro elenco con corrispondenze parziali agli elementi di un terzo elenco?Ecco come lo farei
Names default to here(1);
bigList = {"CD_CORN_1", "ICS_CORN_6", "IPEK21_S00R_P37_2", "CURR_S009_P37_2", "CD_CORN_2", "Ig_RF", "Cmax03_4C230RF", "NG"};
smallList1 = {"CD_CORN_"}; //note these are repeats and that is how I get them
smallList2 = {"IDS_CORN_", "IPEK21_S00R_", "CURR_S009_"};
smallList3 = {"RF", "IPEK21_S00R_", "CURR_S009_", "NG"};
foundList = {};
For Each( {theList}, bigList,
For Each( {sublist}, smallList1,
if(contains(theList,sublist),
insert into(foundlist, theList)
)
);
For Each( {sublist}, smallList2,
if(contains(theList,sublist),
insert into(foundlist, theList)
)
);
For Each( {sublist}, smallList3,
if(contains(theList,sublist),
insert into(foundlist, theList)
)
);
);
Ogni elemento separato di bigList deve essere valutato separatamente.
Ri: Come estrarre gli elementi di un elenco da un altro elenco con corrispondenze parziali agli elementi di un terzo elenco?Molto probabilmente creerei una funzione per qualcosa di simile
Names Default To Here(1);
bigList = {"CD_CORN_1", "ICS_CORN_6", "IPEK21_S00R_P37_2", "CURR_S009_P37_2", "CD_CORN_2", "Ig_RF", "Cmax03_4C230RF", "NG"};
smallList1 = {"CD_CORN_", "CD_CORN_", "CD_CORN_"};
smallList2 = {"IDS_CORN_", "IPEK21_S00R_", "CURR_S009_"};
smallList3 = {"RF", "IPEK21_S00R_", "CURR_S009_", "NG"};
get_partial_matches = function({to_list, with_list}, {Default Local},
/*""" Get partial matches to_list using with_list
Args:
from_list (list(str)): list to compare to
to_list (list(str)): list to compare with
Returns:
list(str): List with partial matches in alphabetical order
"""*/
matches = Associative Array(); // associative array to avoid duplicates
For Each({to_item}, to_list,
For Each({with_item}, with_list,
If(Contains(to_item, with_item),
Insert Into(matches, to_item);
);
);
);
return(matches << get keys); // << get keys to get result in a list
);
list1 = get_partial_matches(bigList, smallList1);
list2 = get_partial_matches(bigList, smallList2);
list3 = get_partial_matches(bigList, smallList3);
show(list1, list2, list3);
un'altra opzione sarebbe qualcosa del genere, ma preferirei di gran lunga usare quella precedente
get_partial_matches2 = function({to_list, with_list}, {Default Local},
matches = Associative Array();
pattern = Concat Items(with_list, "|");
For Each({to_item}, to_list,
res = Regex(to_item, pattern);
If(!IsMissing(res),
Insert Into(matches, to_item);
);
);
return(matches << get keys);
);
list1 = get_partial_matches2(bigList, smallList1);
list2 = get_partial_matches2(bigList, smallList2);
list3 = get_partial_matches2(bigList, smallList3);
show(list1, list2, list3);