472,371 Members | 1,602 Online

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?

Aug 21 '06 #1
5 1199
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/
Aug 21 '06 #2

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

Aug 21 '06 #3
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

Aug 21 '06 #4

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

Aug 21 '06 #5
On 2006-08-21, Steven <sf********@gmail.comwrote:
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
Aug 21 '06 #6

This thread has been closed and replies have been disabled. Please start a new discussion.