I have a set of data in the form:
X1 = [(1,1),(3,1),(5,0),(3,0),(2,1)]
I can't figure out how to group them such that:
X2 = [[(1,1),(3,1)],[(5,0),(3,0)],[(2,1)]]
i.e. they are grouped in a consecutive fashion by the second value in each tuple.
I know it's something with this:
http://docs.python.org/2/library/itertools.html#itertools.groupby
from itertools import groupby
from operator import itemgetter
X2 = [list(group) for key, group in groupby(X1, itemgetter(1))]
Pass a key
function to groupby
that fetches the second item of each tuple, so groupby
groups the tuples by their second items.
from itertools import groupby, imap
from operator import itemgetter
X1 = [(1,1),(3,1),(5,0),(3,0),(2,1)]
print map(list, imap(itemgetter(1), groupby(X1, itemgetter(1))))
# -> [[(1, 1), (3, 1)], [(5, 0), (3, 0)], [(2, 1)]]
x = [(1,1),(3,1),(5,0),(3,0),(2,1)]
y = [x[n:n+2] for n in range(0, len(x), 2)]
print(y)