python
1コード 2def Combinations(n,guestList): 3 allCombL=[] 4 for i in range(2**n): 5 num=i 6 cList=[] 7 for j in range(n): 8 if num%2==1: 9 cList=[guestList[n-1-j]]+cList 10 11 num=num//2 12 allCombL.append(cList) 13 return allCombL 14 15def removeBadCombinations(allCombL,dislikePairs): 16 allGoodCombinations=[] 17 for i in allCombL: 18 good=True 19 for j in dislikePairs: 20 if j[0] in i and j[1] in i: 21 good=False 22 if good: 23 allGoodCombinations.append(i) 24 return allGoodCombinations 25 26def InviteDinner(guestList,dislikePairs): 27 x=Combinations(len(guestList),guestList) 28 y=removeBadCombinations(x,dislikePairs) 29 30 invite=max(y,key=len) 31 print('Optimum Solution:',invite) 32 33dislikePairs=[[('A',2),('B',6)],[('B',6),('E',3)]] 34guestList=[('A',2),('B',6),('C',3),('D',10),('E',3)] 35InviteDinner(guestList,dislikePairs) 36 37ここまでが本に書いてあるプログラムでここからdislikePairsがいっしょにならないような条件下でguestListのタプル内の数字が一番大きくなるような組み合わせを表示したいです。 38自分で考えたのは関数Sum 39def Sum(allGoodCombinations): 40 S=[] 41 42 for i in allGoodCombinations: 43 k=0 44 for j in i: 45 k+=j[1] 46 S.append(k) 47 return S 48を作り、各組合せの数字の合計を順番通りにリスト化し、そこの最大値をもとめ、そのインデックスを調べ、それをallGoodCombinationsに適応することで求められるとおもっていたのですがうまくいきません。 49 50 51> 引用テキスト 問題解決のpythonプログラミング第八章
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/09 09:40