[Date Index]
[Thread Index]
[Author Index]
Re: Or in a Select question
*To*: mathgroup at smc.vnet.net
*Subject*: [mg67123] Re: [mg67066] Or in a Select question
*From*: bsyehuda at gmail.com
*Date*: Fri, 9 Jun 2006 01:10:34 -0400 (EDT)
*References*: <200606080854.EAA12393@smc.vnet.net>
*Sender*: owner-wri-mathgroup at wolfram.com
Hi Janos,
There is a logical error in your function. use And in place of Or
since the Select function needs to select the pairs with both elements
different.
So
Select[pp, (#1[[1, 1]] =!= #1[[1, 2]] && #1[[2, 1]] =!= #1[[2, 2]])&]
I would like to suggest the pattern matching approch which is more intuitive
in this case
lst = {a, b, c};
pp = Partition[Tuples[lst, 2], 2, 1];
DeleteCases[pp, {{x_, x_}, _} | {_, {x_, x_}}]
regards
yehuda
On 6/8/06, J=E1nos <janos.lobb at yale.edu> wrote:
>
> 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=E1nos
> 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)
>
>
Prev by Date:
**Re: Or in a Select question**
Next by Date:
**rules for using functions as basis vectors**
Previous by thread:
**Re: Or in a Select question**
Next by thread:
**Re: Or in a Select question**
| |