質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

1191閲覧

python3 既存コードの拡張

Untitled_Sample

総合スコア192

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/02/13 11:27

現状
3枚のカードを並べて、1からxの組み合わせをl配列にいれました。
合計がYのカードに組み合わせを出力してます。

拡張したい部分
3枚ではなく、T枚のカードを並べるには、
どの様なコードが適切なのでしょうか?

失敗コード

python

1l=[] 2r=[] 3def Sample02(x,y): 4 for i in range(1,x): 5 for i2 in range(1,x): 6 for i3 in range(1,x): 7 l.append([i,i2,i3]) 8 for i in l: 9 if sum(i)==y: 10 r.append(i) 11 12Sample02(20,20) 13print(r)

zなどを加えて、for _ in range()
の回数を増やす事は可能でしょうか?

考え方が違って居たなら指摘下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/13 11:51

1からxまでの要素を取り出すにはrange(1, x+1)としないと、右端のxが含まれなくなります。
guest

回答3

0

ベストアンサー

こんな感じでしょうか。

Python

1from itertools import combinations 2 3def sample(x, y, t=3): 4 return [ 5 nums for nums in combinations(range(1, x), t) if sum(nums) == y 6 ] 7 8print(*sample(20, 20), sep='\n')

実行結果 Wandbox


コメントでご指摘を受けている通り、重複ありの組み合わせの方が適しているかもしれません。
実行結果(重複なし重複あり)を見てご判断ください。

投稿2018/02/13 11:45

編集2018/02/13 11:58
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/02/13 11:53

なお、元のコードと同一な処理をしたい場合、『組み合わせ』ではなく『順列』となります。 その場合mkgreiさんやdkato0077さんのご回答が参考になるかと。
退会済みユーザー

退会済みユーザー

2018/02/13 11:54

重複を許さない組み合わせならcombinations, 重複を許すならcombinations_with_replacementですね。
LouiS0616

2018/02/13 11:55

あ、確かにcombinations_with_replacementの方がよさそうですね。 コメントありがとうございます。
guest

0

itertoolsモジュールのproductを使うと比較的簡単に書けます。

python

1from itertools import product 2x = 10 3y = 5 4T = 3 5lst = range(1, x+1) 6r = [] 7for l in product(lst, repeat=T): 8 if sum(l) == y: 9 r.append(l)

なお、このfor-loopはリスト内包表記に置きかえることができます。

python

1r = [l for l in product(lst, repeat=T) if sum(l) == y]

投稿2018/02/13 11:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

itertoolsのproductはいかがでしょう。
https://docs.python.jp/3/library/itertools.html#itertools.product

投稿2018/02/13 11:49

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問