Re: Or in a Select question
- To: mathgroup at smc.vnet.net
- Subject: [mg67078] Re: Or in a Select question
- From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
- Date: Fri, 9 Jun 2006 01:06:41 -0400 (EDT)
- Organization: Uni Leipzig
- References: <e68q6i$d0p$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi, Select[pp, (And @@ (UnsameQ @@@ #)) & ] look not soooo complicated and the pattern matcher in Cases[] should try more than one possibility to match the pattern. Regards Jens "János" <janos.lobb at yale.edu> schrieb im Newsbeitrag news:e68q6i$d0p$1 at smc.vnet.net... | Hi, | | I have a list | | lst={a,b,c} | | I make another list from it the following way: | | In[2]:= | pp = Partition[Tuples[lst, | 2], 2, 1] | Out[2]= | {{{a, a}, {a, b}}, | {{a, b}, {a, c}}, | {{a, c}, {b, a}}, | {{b, a}, {b, b}}, | {{b, b}, {b, c}}, | {{b, c}, {c, a}}, | {{c, a}, {c, b}}, | {{c, b}, {c, c}}} | | From here I would like to select all the elements whose sublists | contain only different elements. So my "logical" selection was: | | In[54]:= | Select[pp, | #1[[1,1]] =!= #1[[1,2]] || | #1[[2,1]] =!= #1[[2, | 2]] & ] | Out[54]= | {{{a, a}, {a, b}}, | {{a, b}, {a, c}}, | {{a, c}, {b, a}}, | {{b, a}, {b, b}}, | {{b, b}, {b, c}}, | {{b, c}, {c, a}}, | {{c, a}, {c, b}}, | {{c, b}, {c, c}}} | | Well, that did not do any damage to the list. After some time I came | up with this one: | | In[49]:= | Complement[pp, Select[pp, | Xor[#1[[1,1]] =!= | #1[[1,2]], | #1[[2,1]] =!= #1[[2, | 2]]] & ]] | Out[49]= | {{{a, b}, {a, c}}, | {{a, c}, {b, a}}, | {{b, c}, {c, a}}, | {{c, a}, {c, b}}} | | That looks OK, but also looks too complicated. Why my "logical" one | does not work here? | | Interestingly if I just use either the left or right side of the Or, | that partial select is working. For example: | | In[65]:= | Select[pp, #1[[1,1]] =!= | #1[[1,2]] & ] | Out[65]= | {{{a, b}, {a, c}}, | {{a, c}, {b, a}}, | {{b, a}, {b, b}}, | {{b, c}, {c, a}}, | {{c, a}, {c, b}}, | {{c, b}, {c, c}}} | | Now if I try with Cases and conditional pattern matching then the | selection for sublists with identical elements works: | | In[98]:= | Cases[pp, {u_, v_} /; | u[[1]] === u[[2]] || | v[[1]] === v[[2]]] | Out[98]= | {{{a, a}, {a, b}}, | {{b, a}, {b, b}}, | {{b, b}, {b, c}}, | {{c, b}, {c, c}}} | | If I change here the === to =!=, then I do not get again that I expect: | | In[103]:= | Cases[pp, | (({u_, v_} /; u[[1]]) =!= | u[[2]] || v[[1]]) =!= | v[[2]]] | From In[103]:= | \!\(\* | RowBox[{\(Part::"partd"\), | ":", "\<\"Part specification \\!\\(u \[LeftDoubleBracket] 2 \ | \[RightDoubleBracket]\\) is longer than depth of object. \ | \\!\\(\\*ButtonBox[\\\"More\[Ellipsis]\\\", ButtonStyle->\\ | \"RefGuideLinkText\ | \\\", ButtonFrame->None, ButtonData:>\\\"General::partd\\\"]\\)\"\>"}]\) | From In[103]:= | \!\(\* | RowBox[{\(Part::"partd"\), | ":", "\<\"Part specification \\!\\(v \[LeftDoubleBracket] 2 \ | \[RightDoubleBracket]\\) is longer than depth of object. \ | \\!\\(\\*ButtonBox[\\\"More\[Ellipsis]\\\", ButtonStyle->\\ | \"RefGuideLinkText\ | \\\", ButtonFrame->None, ButtonData:>\\\"General::partd\\\"]\\)\"\>"}]\) | Out[103]= | {} | From In[104]:= | Part::"partd":"Part specification \!\(u \[LeftDoubleBracket] 2 \ | \[RightDoubleBracket]\) is longer than depth of object. \ | \!\(\*ButtonBox[\"More\[Ellipsis]\", ButtonStyle->\"RefGuideLinkText | \", \ | ButtonFrame->None, ButtonData:>\"General::partd\"]\)" | From In[104]:= | Part::"partd":"Part specification \!\(v \[LeftDoubleBracket] 2 \ | \[RightDoubleBracket]\) is longer than depth of object. \ | \!\(\*ButtonBox[\"More\[Ellipsis]\", ButtonStyle->\"RefGuideLinkText | \", \ | ButtonFrame->None, ButtonData:>\"General::partd\"]\)" | | if I change =!= to only != then I still do not get that I expect: | | In[108]:= | Cases[pp, {u_, v_} /; | u[[1]] != u[[2]] || | v[[1]] != v[[2]]] | Out[108]= | {} | | Obviously I am not GETting something here :) | | Thanks ahead, | | János | P.S. It is 5.1 on OSX 10.4.6. I know that Or evaluates in a non- | traditional way and looked the Appendix - that is how I ended up with | Xor. | | | | | | | ---------------------------------------------- | Trying to argue with a politician is like lifting up the head of a | corpse. | (S. Lem: His Master Voice) |