4

私はリストのリストを持っています.2番目のレベルのリストの最初の各項目は、その性質に関する一種のメタ情報として見ることができます.

# simple sample, real data are much more complex, but it can be schematized as this one
L = [('n0', 1), ('n1', 4), ('n1', 2), ('n2', 5)] 

性質はここで入手できます:

natures = list(set(zip(*L)))[0]

私は、それぞれの「性質」の連続によってそれらをグループ化する、それぞれ異なる可能な組み合わせのそれぞれを持つ別のリストを作成する必要があります(つまり、natures

結果は以下の例からのものでなければなりません

R = [
     [('n0', 1), ('n1', 4), ('n2', 5)],
     [('n0', 1), ('n1', 2), ('n2', 5)]
]

これは、いくつかの itertools パッケージを使用して巧妙に行うことができると思いますが、その中で完全に迷ってしまいました。誰かが正しい itertools を使用するのを手伝ってくれませgroupbyproductか?

よろしくお願いします

4

2 に答える 2

4

まず、 を使用itertools.groupbyして要素をその性質によってグループ化し、次にitertools.product関数を使用して、さまざまな性質のアイテムのすべての組み合わせを形成できます。

L = [('n0', 1), ('n1', 4), ('n1', 2), ('n2', 5)] 

from itertools import groupby, product
groups = [list(group) for key, group in groupby(L, lambda x: x[0])]
R = map(list, product(*groups))
print R

出力:

[[('n0', 1), ('n1', 4), ('n2', 5)], [('n0', 1), ('n1', 2), ('n2', 5)]]
于 2013-09-04T11:05:56.887 に答える