質問

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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top