Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   List Splitting (http://www.velocityreviews.com/forums/t365746-list-splitting.html)

 Steven 08-21-2006 07:17 PM

List Splitting

Hello everyone,

I'm trying to work through a bit of a logic issue I'm having with a
script I'm writing. Essentially, I have a list that's returned to
me from another command that I need to regroup based on some aribitrary
length.

For the purposes of this question, the list will be:

t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]

Now, I know that every 3rd element of the list belongs together:

Group 1 = 0, 3, 6
Group 2 = 1, 4, 7
Group 3 = 2, 5, 8

I'm trying to sort this list out so that I get a list of lists that
contain the correct elements:

Goal = [ [ "a", "n", "t"], [ "b", "a", "t"],
["c", "a", "t" ] ]

The actual data isn't as simple as this, but if I can get the logic
sorted out, I can handle the other part.

Anyone have any good ideas on how to do this?

 Klaus Alexander Seistrup 08-21-2006 07:22 PM

Re: List splitting

Steven skrev:

> For the purposes of this question, the list will be:
>
> t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]
>
> Now, I know that every 3rd element of the list belongs together:
>
> Group 1 = 0, 3, 6
> Group 2 = 1, 4, 7
> Group 3 = 2, 5, 8
>
> I'm trying to sort this list out so that I get a list of lists
> that contain the correct elements:
>
> Goal = [ [ "a", "n", "t"], [ "b", "a", "t"],
> ["c", "a", "t" ] ]

#v+

>>> t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]
>>> [t[i::3] for i in range(3)]

[['a', 'n', 't'], ['b', 'a', 't'], ['c', 'a', 't']]
>>>

#v-

Cheers,

--
Klaus Alexander Seistrup
SubZeroNet, Copenhagen, Denmark
http://magnetic-ink.dk/

 Bill Pursell 08-21-2006 07:25 PM

Re: List Splitting

Steven wrote:
> Hello everyone,
>
> I'm trying to work through a bit of a logic issue I'm having with a
> script I'm writing. Essentially, I have a list that's returned to
> me from another command that I need to regroup based on some aribitrary
> length.
>
> For the purposes of this question, the list will be:
>
> t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]
>
> Now, I know that every 3rd element of the list belongs together:
>
> Group 1 = 0, 3, 6
> Group 2 = 1, 4, 7
> Group 3 = 2, 5, 8
>
> I'm trying to sort this list out so that I get a list of lists that
> contain the correct elements:
>
> Goal = [ [ "a", "n", "t"], [ "b", "a", "t"],
> ["c", "a", "t" ] ]
>
> The actual data isn't as simple as this, but if I can get the logic
> sorted out, I can handle the other part.
>
> Anyone have any good ideas on how to do this?

>>> t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]
>>> [t[i::3] for i in range(0,len(t)/3)]

[['a', 'n', 't'], ['b', 'a', 't'], ['c', 'a', 't']]
--
Bill Pursell

 Tim Chase 08-21-2006 07:28 PM

Re: List Splitting

> For the purposes of this question, the list will be:
>
> t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]
>
> Now, I know that every 3rd element of the list belongs together:
>
> Group 1 = 0, 3, 6
> Group 2 = 1, 4, 7
> Group 3 = 2, 5, 8
>
> I'm trying to sort this list out so that I get a list of lists that
> contain the correct elements:
>
> Goal = [ [ "a", "n", "t"], [ "b", "a", "t"],
> ["c", "a", "t" ] ]

Well, the following worked for me:

>>> t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]
>>> stride = 3
>>> Goal = [t[i::stride] for i in range(stride)]
>>> Goal

[['a', 'n', 't'], ['b', 'a', 't'], ['c', 'a', 't']]

Or, if you like, in this example:

>>> [''.join(t[i::stride]) for i in range(stride)]

['ant', 'bat', 'cat']

if that's of any use.

-tkc

 Steven 08-21-2006 07:30 PM

Re: List splitting

Klaus Alexander Seistrup wrote:
> >>> t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]
> >>> [t[i::3] for i in range(3)]

> [['a', 'n', 't'], ['b', 'a', 't'], ['c', 'a', 't']]

Klaus,

Thanks for the fast reply! Had I taken the time to look at the
list-type docs (which I did to understand how you were spliting the
list), I'd probably have seen the slicing with step option. Another
RTFM issue for me.

Thanks again,
Steven

 Neil Cerutti 08-21-2006 07:42 PM

Re: List Splitting

On 2006-08-21, Steven <sfaulconer@gmail.com> wrote:
> Hello everyone,
>
> I'm trying to work through a bit of a logic issue I'm having with a
> script I'm writing. Essentially, I have a list that's returned to
> me from another command that I need to regroup based on some aribitrary
> length.
>
> For the purposes of this question, the list will be:
>
> t = [ "a", "b", "c", "n", "a", "a", "t", "t", "t" ]
>
> Now, I know that every 3rd element of the list belongs together:
>
> Group 1 = 0, 3, 6
> Group 2 = 1, 4, 7
> Group 3 = 2, 5, 8

from itertools import islice

grouped = []
grouped.append(list(islice(t, 0, None, 3))
grouped.append(list(islice(t, 1, None, 3))
grouped.append(list(islice(t, 2, None, 3))
grouped.sort()

This can probably be simplified and generalized, but I'm a novice, and
that's a start.

--
Neil Cerutti

 All times are GMT. The time now is 11:52 PM.