2017-08-30 4 views
-1

リストの可能な組み合わせをすべて印刷するようにスクリプトを作成しようとしていた[1,2(1,2)は異なるものとしてカウントされますエントリ]。たとえば :私はitertools.permutationsを試してみたリスト内の要素の可能な組み合わせをすべて生成する

c = [1,2] 
# do something magical 
print(c with magical stuff) 
>>>[(1), (2), (1, 1), (1, 2), (2, 1), (2, 2)] 

。 >>>()(1、)(2、)(1,2)(2,1)として出力します。ただし、(1,1)と(2,2)は含まれません。

ご協力いただければ幸いです。私はコーディングに新たなんだ(私は印刷に非常に流暢なんだけれども、 "Hello Worldの!":3)私にとって

+6

しかし、あなたが示した出力には、両方とも '(1,2)'と '(2,1)'が含まれています。 – khelwood

+0

[Pythonでリストのすべての順列を生成する方法](https://stackoverflow.com/questions/104420/how-to-generate-all-permutations-of-a-list-in-python) –

答えて

1

作品:

c = [1,2] 
for i in itertools.permutations(c): 
    print i 

利回り

(1, 2) 
(2, 1) 
+0

の可能な複製ありがとうございました。します。しかし、(1,1)と(2,2)のような要素をすべて組み合わせるわけではありません。混乱のタイトルに申し訳ありません。 –

3

itertools.productをお試しください:

def foo(l): 
    yield from itertools.product(l) 
    yield from itertools.product(l, l) 

for x in foo([1, 2]): 
    print(x) 

(1,) 
(2,) 
(1, 1) 
(1, 2) 
(2, 1) 
(2, 2) 

yield fromの構文は、python3.3以降で利用できます。

+0

ありがとうございます。これはまさに私が望んでいたものです。 –

1

あなたのためにこれを行うことができる組み込みの(またはより可能性の高いnumpy)パッケージがあるかもしれませんが、あなた自身でそれを行うには優れた練習です。

1つの質問 - あなたは長さ2の置換に専念していますか、任意に長い置換のための関数を書いていますか?また

、以下を参照してくださいHow to generate all permutations of a list in Python

+0

これは本当に質問に答えません。 –

+0

@cᴏʟᴅshoweverしかし、彼は*コメント*に必要な50人の担当者にふさわしいことを示しています。それが私がとにかくアップvした理由です。しかしColdspeedは正しいMikeです。これは、解答ではなく、コメントとしてより適切なものになります。 –

+0

は、初心者の例をコーディングすることが適切であるかどうかを確かめていないが、いくつかの高レベルの考えを与えることを選んだ –

0

は、交換との組み合わせを作成し、その結果を並べ替えるだけのユニークな結果を維持します。

import itertools as it 


combs = it.chain.from_iterable(it.combinations_with_replacement(c, i) for i in range(1,3)) 
perms = it.chain.from_iterable([set(it.permutations(i)) for i in combs]) 
list(perms) 
# [(1,), (2,), (1, 1), (1, 2), (2, 1), (2, 2)] 
関連する問題