One could go mad trying to understand the WL
Both Pick and Select respond to True, why does one work but not the other??
Welcome to Wolfram Community! Please make sure you know the rules: https://wolfr.am/READ-1ST
The rules explain how to format your code properly. Posting code Images doesn’t help other members to copy your code. Please EDIT your post and make sure code blocks start on a new paragraph and look framed and colored like this.
int = Integrate[1/(x^3 - 1), x];
Map[Framed, int, Infinity]
You can also embed notebook or attach notebook.
Select[{“NYSE:123”, “NASDAQ:456”, “NotRelevent”},
StringMatchQ[#, {“NYSE*”, “NASDAQ*”}] &]
In Select you need a predicate function in the second argument.
What is a predicate function??
Slot works but List does not, why
In[89]:= Select[sec1, StringMatchQ[sec1, {"NYSE:*", "NASDAQ:*"}]]
Out[89]= {}
In[121]:= Select[sec1, StringMatchQ[#, {"NYSE:*", "NASDAQ:*"}] &]
Out[121]= {"NASDAQ:ADV", "NASDAQ:ADVWW", "NASDAQ:BAOS", \
"NASDAQ:BOMN", "NASDAQ:CMPR", "NASDAQ:CNET", "NASDAQ:CPOP", \
"NASDAQ:CRTO", "NASDAQ:FLNT", "NASDAQ:IAS", "NASDAQ:ICLK", \
"NASDAQ:ISIG", "NASDAQ:MCHX", "NASDAQ:MDCA", "NASDAQ:MGNI", \
"NASDAQ:NCMI", "NASDAQ:QNST", "NASDAQ:SRAX", "NASDAQ:TRKA", \
"NASDAQ:TRMR", "NASDAQ:VISN", "NASDAQ:WIMI", "NASDAQ:XNET", \
"NYSE:CCO", "NYSE:DLX", "NYSE:DMS", "NYSE:EEX", "NYSE:INUV", \
"NYSE:IPG", "NYSE:OMC", "NYSE:QUOT", "NYSE:TSQ", "NYSE:WPP"}
Hello Raymond!
According to the documentation, Select[…] takes two arguments, a “list” and a criteria “crit” that must be a function. Why? Because every single item from the list will be applied for the criteria “crit”.
When you do something like:
In[1]:= Select[mylist, StringMatchQ[mylist, "..."]]
You’re not giving a proper criteria.. StringMatchQ itself does not work with a list, only an individual word.
If you do the following:
In[2]:= Select[mylist, StringMatchQ[#, "..."] &]
That will work! Because the second argument of Select is a function, thus, every single String from your list will be tested and selected for those who produce True as output.
Hope it helps!
Pedro Cabral.
Thank you Pedro – we are getting close, but I am still a little slow. So what I gather is that Slot, # & iterates through the list, like Table, but without the instructions of ,{i, 1, 178}. and StringMatchQ, by itself, looks at only the first element, makes an assessment and quits, not bothering to look at the rest of the elements in the list??
But what did Pick[] do to StringMatchQ so now it has the vitality to ponder the whole list and give me the correct results???
Slot, # & iterates through the list
No Select iterates over the list and calls the specified function for each element. The result contains the elements for which the function value is True.
StringMatchQ implicitly iterates over lists
list = {"NYSE:123", "NASDAQ:456", "NotRelevent"};
StringMatchQ[list, {"NYSE:*", "NASDAQ:*"}]
(* {True, True, False} *)
Thanks Rohit, but now I am back to being confused…
sec178 = {"DE:UWS", "DE:VVD", "DE:ZEF", "F:0AZ", "F:1EZA", "F:1K5",
"F:1K50", "F:1VX", "F:36E", "F:3ER", "F:49Q", "F:4X8", "F:4Y4",
"F:5AR1", "F:5NQ", "F:5ZK", "F:6RY", "F:7AR", "F:86B", "F:A19",
"F:AQK", "F:BIU2", "F:C36", "F:C3K", "F:CH6", "F:CNE", "F:DGN",
"F:FCC", "F:H2Y", "F:LT5", "F:NGO", "F:PFX1", "F:PNU", "F:RPU",
"F:SCB", "F:SCB0", "F:SUD", "F:SY9", "F:TG9", "F:TIA", "F:TMR",
"F:TMR0", "F:UL5A", "F:UWS", "F:VVD", "F:VVDH", "F:WA3", "F:WCN",
"F:ZEF", "F:ZSC", "HK:00257", "HK:00895", "HK:01065", "HK:01363",
"HK:01483", "HK:01857", "HK:03989", "L:BIFF", "L:RWI", "MB:533269",
"NASDAQ:AQMS", "NASDAQ:CWST", "NASDAQ:ECOL", "NASDAQ:HCCI",
"NASDAQ:JAN", "NASDAQ:PESI", "NASDAQ:QRHC", "NASDAQ:SMED",
"NASDAQ:SRCL", "NYSE:AWX", "NYSE:CHRA", "NYSE:CLH", "NYSE:CVA",
"NYSE:GFL", "NYSE:GFLU", "NYSE:MEG", "NYSE:NES", "NYSE:NRCG",
"NYSE:RSG", "NYSE:WCN", "NYSE:WM", "PA:ALEUP", "PA:ALTUV", "PA:DBG",
"PA:DBGBS", "PA:SCHP", "PA:VIE", "SS:600874", "SZ:002672",
"TO:ANRG", "TO:GFL", "TO:WCN", "TSE:5857", "TSE:9793"}
In[168]:= AA = StringMatchQ[sec178, {"NYSE:*", "NASDAQ:*"}]
Out[168]= {False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, True, True, True, True, True, True, True, True, True, \
True, True, True, True, True, True, True, True, True, True, True, \
True, False, False, False, False, False, False, False, False, False, \
False, False, False, False}
In[169]:= BB = StringMatchQ[#, {"NYSE:*", "NASDAQ:*"}] & /@ sec178
Out[169]= {False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, False, False, False, False, False, False, False, False, \
False, False, True, True, True, True, True, True, True, True, True, \
True, True, True, True, True, True, True, True, True, True, True, \
True, False, False, False, False, False, False, False, False, False, \
False, False, False, False}
In[170]:= AA === BB
Out[170]= True
In[172]:= Pick[sec178, AA]
Pick[sec178, BB]
Out[172]= {"NASDAQ:AQMS", "NASDAQ:CWST", "NASDAQ:ECOL", \
"NASDAQ:HCCI", "NASDAQ:JAN", "NASDAQ:PESI", "NASDAQ:QRHC", \
"NASDAQ:SMED", "NASDAQ:SRCL", "NYSE:AWX", "NYSE:CHRA", "NYSE:CLH", \
"NYSE:CVA", "NYSE:GFL", "NYSE:GFLU", "NYSE:MEG", "NYSE:NES", \
"NYSE:NRCG", "NYSE:RSG", "NYSE:WCN", "NYSE:WM"}
Out[173]= {"NASDAQ:AQMS", "NASDAQ:CWST", "NASDAQ:ECOL", \
"NASDAQ:HCCI", "NASDAQ:JAN", "NASDAQ:PESI", "NASDAQ:QRHC", \
"NASDAQ:SMED", "NASDAQ:SRCL", "NYSE:AWX", "NYSE:CHRA", "NYSE:CLH", \
"NYSE:CVA", "NYSE:GFL", "NYSE:GFLU", "NYSE:MEG", "NYSE:NES", \
"NYSE:NRCG", "NYSE:RSG", "NYSE:WCN", "NYSE:WM"}
In[178]:= Select[sec178, AA]
Select[sec178, BB]
Select[sec178, StringMatchQ[#, {"NYSE:*", "NASDAQ:*"}] &]
Out[178]= {}
Out[179]= {}
Out[180]= {"NASDAQ:AQMS", "NASDAQ:CWST", "NASDAQ:ECOL", \
"NASDAQ:HCCI", "NASDAQ:JAN", "NASDAQ:PESI", "NASDAQ:QRHC", \
"NASDAQ:SMED", "NASDAQ:SRCL", "NYSE:AWX", "NYSE:CHRA", "NYSE:CLH", \
"NYSE:CVA", "NYSE:GFL", "NYSE:GFLU", "NYSE:MEG", "NYSE:NES", \
"NYSE:NRCG", "NYSE:RSG", "NYSE:WCN", "NYSE:WM"}
The results of code AA and BB are exactly the same, what is different about the last part of the code in Select[sec178, StringMatchQ[#, {“NYSE:", "NASDAQ:”}] &]???
Pick[] works with both AA and BB, but Select[] does not work with AA nor does it work with BB, but has to have it at BurgerKing – have it, its own way. Hard to make sense of a code with such anomalies?? What am I missing here???
Select[sec178, AA]
Does not work because AA is not a function that evaluates to True or False, it is a List that contains True or False elements. Re. why Pick works, carefully read the documentation.
Select[sec178, StringMatchQ[#, {"NYSE:*", "NASDAQ:*"}] &]
Works because StringMatchQ[#, {"NYSE:*", "NASDAQ:*"}] & is a function.
Thanks Rohit – but I would argue that the documentation needs to be changed from what I copied in my first statement above. Below is all the documentation a users gets, the rest are examples.
Pick[] takes an element from a list based on pattern matching done on a second list.
From what you are telling me, Select[] takes an element from a list based on a function preformed on the original list – I don’t see how someone could have figured that out from a careful reading of the documentation – But thank you very much, that was very helpful and now I am aware of it.