1

親愛なる皆さん、たとえば3つの値をとる変数が与えられた場合、私はこれらの変数のたとえばトリプレットのすべての可能な組み合わせを生成しようとしています。

このコードはトリックを行いますが、

site_range=[0,1,2]
states = [(s0,s1,s2) for s0 in site_range for s1 in site_range for s2 in site_range]

それはやや、うーん、不器用で、3つ以上の変数の組み合わせに対して同じことをしようとした場合にのみ悪化します

したがって、私のPython101の質問は次のとおりです。

  1. イテレータを使用して上記のコードを書き直すにはどうすればよいですか?つまり、上記の「状態」の要素を生成するイテレータを持つことは可能ですか?

  2. トリプレットだけでなく、4プレット、5プレットなどを生成するためにこれを拡張することは可能ですか?

4

2 に答える 2

4
import itertools
site_range=[0,1,2]
[x for x in itertools.product(site_range, repeat=len(site_range))]
于 2010-10-25T10:42:23.957 に答える
3

使用itertools.product

>>> site_range=[0,1]
>>> list(product(site_range, repeat=3))
[000 001 010 011 100 101 110 111]

編集@GlennMaynardがコメントで指摘しているように、これはデカルト積ではありません。このためには、彼の答えを確認する必要があります。

于 2010-10-25T10:42:04.333 に答える