Re: Filtering a list of list for certain elements that are neighbours
- To: mathgroup at smc.vnet.net
- Subject: [mg88837] Re: Filtering a list of list for certain elements that are neighbours
- From: Albert Retey <awnl at arcor.net>
- Date: Mon, 19 May 2008 05:14:25 -0400 (EDT)
- References: <g0p4a2$nc4$1@smc.vnet.net>
Hi, > I have a list of lists > > mylist={{a,b,c},{a,c,b},{b,a,c},{b,c,a},{c,a,b},{c,b,a}} > > I want to filter out all lists that have "a being a neighbor to b". > > I am looking for the following result. > > {{a,c,b},{b,c,a}} I think this is the most straightforward way to achieve what you want: DeleteCases[mylist, {___, a, b, ___} | {___, b, a, ___}] > For this toy example, I can probably do it by hand but my real problem > has 120 lists in a list. And I need to filter out various combination > of letters like "s cannot be next to d" , "s cannot be next to j" , "c > cannot be next to j" , "h cannot be next to d" and "h cannot be next > to s". There might be more efficient solutions than the above, but for 120 lists I think there is no reason to waste your time to save CPU time. You might want to write a filter function which can handle arbitrary pairs, like: filter[l_,a_,b_]:=DeleteCases[l, {___, a, b, ___} | {___, b, a, ___}] then use it like: filter[mylist,s,d] filter[mylist,s,j] ... hth, albert