Re: How to get sub-list elements at certain position in a long list

• To: mathgroup at smc.vnet.net
• Subject: [mg123112] Re: How to get sub-list elements at certain position in a long list
• From: DrMajorBob <btreat1 at austin.rr.com>
• Date: Wed, 23 Nov 2011 07:09:22 -0500 (EST)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com

```That's obviously NOT your list, since the * and ** instances make it
illegal syntax.

When I edit out those stars (but why, oh why do I bother?!?), I get

list = {{{{2.5}, {3.8, 31}, {54.23, 46.263, 45.987}, {-82.1476,
5.17782, -205.36}}, {{2.5}, {4.2, 30}, {233.835, 46.469,
46.819}, {93.8625, -13.9818, -198.778}}}, {{{2.5}, {4.1,
30}, {139.845, 15.719, 155.87}, {93.6633,
4.46398, -205.432}}, {{2.5}, {2.6, 32}, {113.381, 40.988,
85.09}, {90.1206, 16.9792, -205.314}}}, {{{2.5}, {3.1,
30}, {113.858, 34.709, 87.567}, {55.3298,
17.7214, -211.648}}, {{2.5}, {2.7, 30}, {110.54, 31.595,
85.601}, {-25.8558, 175.588, -121.105}}}}

Now, using

list//TreeForm

(* display suppressed *)

or

Depth@list

5

I see that the "last level" is the fourth. But that level consists of
numbers, not lists, so you can't want the fourth element of items at that
level:

Replace[list, x_ :> Length@x, {4}]

{{{{0}, {0, 0}, {0, 0, 0}, {0, 0, 0}}, {{0}, {0, 0}, {0, 0, 0}, {0, 0,
0}}}, {{{0}, {0, 0}, {0, 0, 0}, {0, 0, 0}}, {{0}, {0, 0}, {0, 0,
0}, {0, 0, 0}}}, {{{0}, {0, 0}, {0, 0, 0}, {0, 0, 0}}, {{0}, {0,
0}, {0, 0, 0}, {0, 0, 0}}}}

The third level consists of lists of 1, 2, or 3 elements, so you also
cannot want the fourth element of THOSE items:

Replace[list, x_ :> Length@x, {3}]

{{{1, 2, 3, 3}, {1, 2, 3, 3}}, {{1, 2, 3, 3}, {1, 2, 3, 3}}, {{1, 2,
3, 3}, {1, 2, 3, 3}}}

At level 2, we do have lists with four elements:

Replace[list, x_ :> Length@x, {2}]

{{4, 4}, {4, 4}, {4, 4}}

Hence we can easily retrieve them:

Replace[list, x_ :> x[[4]], {2}]

{{{-82.1476,
5.17782, -205.36}, {93.8625, -13.9818, -198.778}}, {{93.6633,
4.46398, -205.432}, {90.1206, 16.9792, -205.314}}, {{55.3298,
17.7214, -211.648}, {-25.8558, 175.588, -121.105}}}

or (faster if the list happened to be huge):

list[[All, All, 4]]

{{{{-82.1476,
5.17782, -205.36}}, {{93.8625, -13.9818, -198.778}}}, {{{93.6633,
4.46398, -205.432}}, {{90.1206, 16.9792, -205.314}}}, {{{55.3298,
17.7214, -211.648}}, {{-25.8558, 175.588, -121.105}}}}

Flatten achieves your preferred format from either of the last two results:

Flatten[list[[All, All, 4]], 1]

{{-82.1476,
5.17782, -205.36}, {93.8625, -13.9818, -198.778}, {93.6633,
4.46398, -205.432}, {90.1206, 16.9792, -205.314}, {55.3298,
17.7214, -211.648}, {-25.8558, 175.588, -121.105}}

Bobby

On Tue, 22 Nov 2011 04:36:37 -0600, Gy Peng <hitphyopt at gmail.com> wrote:

> Dear Experts,
>
> I have a list:
>
> {{{{2.5}, {3.8, 31}, {54.23, 46.263, 45.987}, *{-82.1476,** 5.17782,
> -205.36}*}, {{2.5}, {4.2, 30}, {233.835, 46.469,
>     46.819}, *{93.8625, -13.9818, -198.778}*}}, {{{2.5}, {4.1,30},
> {139.845, 15.719, 155.87}, *{93.6633,**4.46398, -205.432}*}, {{2.5},
> {2.6,
> 32}, {113.381, 40.988,85.09}, *{90.1206, 16.9792, -205.314}*}}, {{{2.5},
> {3.1,30}, {113.858, 34.709, 87.567}, *{55.3298,**17.7214, -211.648}*},
> {{2.5}, {2.7, 30}, {110.54, 31.595,85.601}, *{-25.8558, 175.588,
> -121.105}*
> }}}
>
> How do I get each 4th sublist element in the last level? I mean, I want
> to
> get a list looks like:
> {*{-82.1476, **5.17782, -205.36}, **{93.8625, -13.9818,
> -198.778},**{90.1206,
> 16.9792, -205.314},**{55.3298,**17.7214, -211.648},**{-25.8558, 175.588,
> -121.105}}*
> which only includes every 4th element in the last level. Do I describe my
> question clearly?
>
> Better not to use any "For", simple Map or Thread method are preferred.
>
> Thank you very much!!!
> *
> *

--
DrMajorBob at yahoo.com

```

• Prev by Date: Re: How to get sub-list elements at certain position in a long list
• Next by Date: Re: How to do quickest
• Previous by thread: Re: How to get sub-list elements at certain position in a long list
• Next by thread: Re: How to get sub-list elements at certain position in a long list