0

itertoolsのproduct()関数を最初に簡単に使用するという、誰かが私にくれたタスクはほぼ完了しました。しかし、その人は、次のような少し違うこともするべきだと尋ねました。

li =

[[1、2、3]、
[4、5、6]]

通常のproduct()は、[1、4]、[1、5]、[1、6]、[2、4]、[2、5]、[2、6]、[3、4 ]..。

それがすべきことは次のとおりです。

通常のproduct()を実行してから、リストの最初の要素から次のアイテムを追加します。例の完全なセットは次のようになります。

[[1、4、2]
[1、4、3]、
[1、5、2
]、 [1、5、3]、[2、4、3]
、 [
2、5、3]、
[2 、6、3]]

この状況でitertoolsをどのように使用する必要がありますか?

編集:

プログラムの目的を説明すると役立つ場合があります。たとえば、ユーザーは5行6列の数字のリストを入力します。
通常のproduct()は、5つの数字の組み合わせになります。その人は6つの数字の組み合わせを望んでいます。この「6番目」の数字はどこから来るのでしょうか?それは彼が望む列の彼の選択から来るでしょう。

4

2 に答える 2

1

あなたが実行している魔法の計算は何であるか疑問に思いますが、それはあなたの公式のように見えます:

k = int(raw_input('From What row items should be appeared again at the end?'))
res = [l for l in product(*(li+[li[k]])) if l[k]<l[len(li)] ]
于 2010-08-17T20:09:07.130 に答える
1

3つ以上のサブリストに一般化(マップ関数は他の選択肢になります)

from pprint import pprint
for li in ([[1, 2, 3],
            [4, 5, 6]],

           [[1,  2,  3,  4],
            [5,  6,  7,  8],
            [9, 10, 11, 12]]
           ):
    triples= []
    prevlist=li[0]
    for nextlist in li[1:]:
        for spacing in range(1,len(prevlist)):
            triples.extend([[first,other,second]
                            for first,second in zip(prevlist,prevlist[spacing:])
                            for other in nextlist])

    pprint(sorted(triples))
于 2010-08-17T20:09:50.900 に答える