2: 2017-05-17 (水) 09:00:50 njf[6] [7] [8] | 現: 2017-05-20 (土) 15:17:44 njf[6] [9] [10] | ||
---|---|---|---|
Line 10: | Line 10: | ||
というような物です。 | というような物です。 | ||
- | 3重ぐらいなら特に手で書いても問題ありませんが、それ以上だとネストが深くなって大変です。または何重かわかっていない場合などはそもそも手で書く事はできません。 | + | 3重ぐらいなら特に手で書いても問題ありませんが、それ以上だとネスト(階層)が深くなって管理が大変です。または何重かわかっていない場合などはそもそも手で書く事はできません。 |
他の手続き型言語ではそのような場合、再帰関数を使うのが一般的で、Pythonでも同様のことが出来ます。 | 他の手続き型言語ではそのような場合、再帰関数を使うのが一般的で、Pythonでも同様のことが出来ます。 | ||
Line 25: | Line 25: | ||
print i, | print i, | ||
+ | |||
loopFunction(2, 3) | loopFunction(2, 3) | ||
Line 34: | Line 34: | ||
import itertools | import itertools | ||
+ | |||
for e in itertools.product(range(2),repeat=3): | for e in itertools.product(range(2),repeat=3): | ||
for i in e: | for i in e: | ||
Line 48: | Line 48: | ||
*全ての組み合わせを生成する「product」 [#b9e52150] | *全ての組み合わせを生成する「product」 [#b9e52150] | ||
- | itertoolsの中でも、特によく使うのはproductでしょう。これはベクトルやテンソルの解析で言うところの直積にあたるもので、引数に与えられた配列などの全ての可能な組み合わせを返します。 | + | itertoolsの中でも、特によく使うのはproductでしょう。これは日本語で「積」を表す名前の通り、ベクトルやテンソルの解析で言うところの直積にあたるもので、引数に与えられた配列などの全ての可能な組み合わせを返します。 |
for i in itertools.product("AB","DE"): | for i in itertools.product("AB","DE"): | ||
Line 98: | Line 98: | ||
第二引数に整数を指定すると、その数だけ要素を取り出した並べ替えを返します。 | 第二引数に整数を指定すると、その数だけ要素を取り出した並べ替えを返します。 | ||
- | for i in itertools.permutations("ABC",2): | + | for i in itertools.permutations("ABC",2): |
- | print i | + | print i |
結果: | 結果: | ||
Line 110: | Line 110: | ||
順番に意味があり、('A', 'B')と('B', 'A')は別の物になります。 | 順番に意味があり、('A', 'B')と('B', 'A')は別の物になります。 | ||
- | 例えば、複数地点を経由した場合の距離を、全ての場合で出したいというときに使えます。 | + | 例えば、複数地点を経由した距離を、全ての場合で出したいというときに使えます。 |
*組み合わせ「combinations」 [#xfab9c98] | *組み合わせ「combinations」 [#xfab9c98] |
(This host) = https://njf.jp