Re: de-nesting complex nested lists
- To: mathgroup at smc.vnet.net
- Subject: [mg111268] Re: de-nesting complex nested lists
- From: David Bailey <dave at removedbailey.co.uk>
- Date: Sun, 25 Jul 2010 07:46:42 -0400 (EDT)
- References: <i2gjui$am$1@smc.vnet.net>
On 25/07/10 07:00, Michael Stern wrote: > If one has an irregularly nested list like > > {{1, 2, 3}, {1, 2, 4}, {{1, 2, 3, 4}, {1, 2, 3, 8}}, {{1, 2, 9}, {{1, 2, 13}, {4, 5, 6}}}}, > > How might one most easily transform this into a list of uniform Depth 2 ( {{1,2,3},{1,2,4},{1,2,3,4},{1,2,3,8},{1,2,9},{1,2,13},{4,5,6}} ) ? > > Thanks in advance, > > Michael > I am sure there are other more elegant ways to do this, but transforming the inner lists to use a different head lets you flatten the rest of the structure without touching the lists of integers. You would need a different test instead of using Depth if your lists are compound objects rather than numbers. In[3]:= xxx = {{1, 2, 3}, {1, 2, 4}, {{1, 2, 3, 4}, {1, 2, 3, 8}}, {{1, 2, 9}, {{1, 2, 13}, {4, 5, 6}}}} Out[3]= {{1, 2, 3}, {1, 2, 4}, {{1, 2, 3, 4}, {1, 2, 3, 8}}, {{1, 2, 9}, {{1, 2, 13}, {4, 5, 6}}}} step1 = xxx /. (x_List /; Depth[x] == 2) :> g @@ x Out[6]= {g[1, 2, 3], g[1, 2, 4], {g[1, 2, 3, 4], g[1, 2, 3, 8]}, {g[1, 2, 9], {g[1, 2, 13], g[4, 5, 6]}}} Flatten[step1] /. g -> List Out[8]= {{1, 2, 3}, {1, 2, 4}, {1, 2, 3, 4}, {1, 2, 3, 8}, {1, 2, 9}, {1, 2, 13}, {4, 5, 6}} I find it often helps to avoid creating structures like your original input by using some structures - f[.......] rather than making everything a list. David Bailey http://www.dbaileyconsultancy.co.uk